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;

Оба дают одинаковый результат, но использование функции является более подходящим способом.

Другие вопросы по тегам