expressjs - как запросить multer в другом файле
Я использую multer в соответствии с файлом readme в github
это readme сказал вызов 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)
Как я могу требовать Multer только на post.js, почти так:
post.js
var multer = require('multer')
module.exports.new = function(req, res){
//access to req.file
}
app.js
app.post('/upload', post.new)
2 ответа
Я могу придумать два пути.
Во-первых, вы могли бы выставить 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, хотя в нем описана техника в несколько ином контексте.
Для структуры 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;
Оба дают одинаковый результат, но использование функции является более подходящим способом.