Javascript 在Node JS中使用multer上传文件

Javascript 在Node JS中使用multer上传文件,javascript,html,node.js,web,multer,Javascript,Html,Node.js,Web,Multer,你能详细解释一下这些代码行中发生了什么吗? 为什么我们要用回调函数在对象中存储函数 var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/tmp/my-uploads') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } })

你能详细解释一下这些代码行中发生了什么吗? 为什么我们要用回调函数在对象中存储函数

var storage = multer.diskStorage({


destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})
 
var upload = multer({ storage: storage })

当multer库想要知道您想要将上传内容放入哪个目录时,它将调用
destination
函数。它将调用
filename
函数,当它想知道您想要给一个特定上传的文件名时

这两个函数都是函数的原因是,您可以选择检查传入请求以计算适合该特定请求的目录或文件名。例如,如果您希望将某个特定用户上载的所有文件存储在该特定用户的目录中,您可以查看
req.session
对象以确定该用户正在进行上载,然后计算该用户的适当目录

如果值已知并且对于所有请求都是常量,
destination
选项可以作为普通字符串而不是函数提供。例如,您可以这样做:

var storage = multer.diskStorage({
    destination: '/tmp/my-uploads',
    filename: function (req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now())
    }
})
您可以通过回调而不仅仅是简单的返回值来传递最终结果的原因是,为了计算目录或文件名应该是什么,您需要执行一些异步操作(如在数据库中查找)。通过调用它们提供的
cb(…)
函数来传回结果,允许您执行异步操作并异步传回结果