代码之家  ›  专栏  ›  技术社区  ›  mo30

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

  •  1
  • mo30  · 技术社区  · 8 年前

    根据github中的自述文件
    自述文件上说打电话给穆特 这样地:

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

    但我定义了我的 在另一个文件-post中。js和我的代码 应用程序。js公司

    app.post('/upload', upload.single('image'), post.new)
    

    我怎么能 要求 穆特只在岗位上。js,几乎是这样:

    邮递js公司

     var multer = require('multer')
     module.exports.new = function(req, res){
         //access to req.file
     }
    

    应用程序。js公司

     app.post('/upload', post.new)
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   skirtle    8 年前

    我可以想出两种方法。

    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
        });
    };
    

    在第二种方法中,我们只是调用 穆特 中间件本身的功能,将其传递给我们自己的功能作为 next 回调。关于在上执行此操作,还有更多信息 https://github.com/expressjs/multer#error-handling 尽管它在稍微不同的上下文中描述了该技术。

        2
  •  2
  •   Sagar    8 年前

    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;
    

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