【问题标题】:expressjs - how to require multer in another fileexpressjs - 如何在另一个文件中要求 multer
【发布时间】:2018-03-19 05:57:00
【问题描述】:

我根据它在 github 中的自述文件使用
它的自述文件说在 中调用 multer,如下所示:

app.js

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

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

【问题讨论】:

    标签: multer middleware javascript node.js express middleware multer


    【解决方案1】:

    对于 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 是更合适的方式。

    【讨论】:

      【解决方案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#error-handling 提供了更多关于执行此操作的信息,尽管它在稍微不同的上下文中描述了该技术。

      【讨论】:

      • exports.functionName = [upload.single('image'), (req, res) { ... }]; @skirtle 先生,让我过得愉快,谢谢
      猜你喜欢
      • 2020-10-16
      • 2017-03-12
      • 2018-06-21
      • 2021-05-21
      • 2019-05-13
      • 2021-08-27
      • 2020-06-17
      • 1970-01-01
      • 2015-12-05
      相关资源
      最近更新 更多