expressjs - 如何在另一个文件中要求 multer

expressjs - how to require multer in another file

我根据 github
中的自述文件使用 自述文件说在 中调用 multer 是这样的:

app.js

var multer = require('multer')
app.post('/upload', upload.single('image'), function(req, res){})

但我在另一个文件中定义了我的 function(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)

我可以想到两个办法

首先,您可以将 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 上有更多关于执行此操作的信息,尽管它在稍微不同的上下文中描述了该技术。

对于 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;

两者给出相同的结果,但使用函数更合适。