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

时间:2017-10-07 16:25:36

标签: javascript node.js express middleware multer

我根据它在github中的自述文件使用 它的自述文件说中的调用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)

2 个答案:

答案 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执行此操作有更多信息,尽管它在稍微不同的上下文中描述了该技术。