【问题标题】:Set multer properties inside an express route在快速路由中设置 multer 属性
【发布时间】:2015-06-12 17:26:58
【问题描述】:

我没有将multer 附加到整个快递app,而是尝试将其仅用于特定路线,这样会更好,因为您将阻止上传到处理post 的每个路线。

问题是,我无法在路由中设置属性。

var router = require('express').Router(),
multer = require('multer');

router.post('/uploads', function (req, res, next) {
   multer({
     dest: req.app.get('cfg').uploads.dir
   });

   console.log(req.files); process.exit();

});

这里,req.files 未定义。

如果我将 multer 放入单独的中间件并将其附加到上述路由,也会发生同样的事情。

function initMulter(req, res, next) {
    multer({
     dest: req.app.get('cfg').uploads.dir
   });

   next();
}

 router.post('/uploads', initMulter, function (req, res, next) {
   console.log(req.files); process.exit();

});

同样在这种情况下,req.filesundefined

我做错了什么还是应该开始责怪啤酒?

【问题讨论】:

    标签: node.js express multer


    【解决方案1】:

    Multer 是它自己的中间件。

    您可以通过以下方式将其添加到路由中:

    router.post('/uploads', multer({
         dest: './my/destination' //req.app.get('cfg').uploads.dir
    }), function (req, res, next) {
        console.log(req.files);
        process.exit();
    });
    

    虽然您将不得不找到另一种方式来访问您的配置。

    一种方法是通过导出函数传递配置或app

    module.exports = function(config) {
        router.post('/uploads', multer({
             dest: config.uploads.dir
        }), function (req, res, next) {
            console.log(req.files);
            process.exit();
        });
        return router;
    });
    

    那么当你需要时,

    var route = require('./route')(app.get('cfg'));
    

    【讨论】:

    • 有什么想法我应该怎么做?
    • @SwarajGiri 我已经用一个例子更新了答案。
    • 为了有一个可配置的 dest 实在是太绕圈子了。可能值得给 multer 家伙敲门。
    猜你喜欢
    • 2021-06-07
    • 2021-06-26
    • 1970-01-01
    • 2020-08-02
    • 2015-11-24
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多