我根据它在github中的自述文件使用multer 它的自述文件说middleware中的调用multer是这样的:
app.js
var multer = require('multer')
app.post('/upload', upload.single('image'), function(req, res){})
但是我在另一个文件中定义了我的函数(req,res) - post.js - 而我在 app.js 中的代码如下所示:
app.post('/upload', upload.single('image'), post.new)
我怎么能要求仅在post.js上进行multer,几乎是这样的:
post.js
var multer = require('multer')
module.exports.new = function(req, res){
//access to req.file
}
app.js
app.post('/upload', post.new)
答案 0 :(得分:2)
对于MVC结构您可以通过以下方式执行此操作:
function Uploader(req, res, next) {
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, your_path);
},
filename: function (req, file, cb) {
cb(null, filename)
}
});
var upload = multer({
storage: storage
});
return upload;
}
module.exports = Uploader
在另一个文件中,您只需使用
即可app.post('/upload', Uploader.single('image'), function(req, res){})
如果您不想创建功能,可以执行以下操作:
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, upload_filePath)
},
filename: function (req, file, cb) {
cb(null,filename)
}
})
var upload= multer({
storage : upload
})
module.exports.upload=upload;
两者都给出了相同的结果,但使用Function是更合适的方式。
答案 1 :(得分:1)
我可以想到两种方式。
首先,您可以将new
公开为数组:
module.exports.new = [upload.single('image'), function(req, res) {
...
}];
其次,您可以在函数中使用multer
:
var imageUpload = upload.single('image');
module.exports.new = function(req, res) {
imageUpload(req, res, function(err) {
// Put the rest of your code here
});
};
在第二种方法中,我们只是自己调用multer
中间件函数,将它们传递给我们自己的函数以用作next
回调。关于在https://github.com/expressjs/multer#error-handling执行此操作有更多信息,尽管它在稍微不同的上下文中描述了该技术。