【问题标题】:How do I get the body of a request from npm's multer if I don't upload a file?如果我不上传文件,如何从 npm 的 multer 获取请求的正文?
【发布时间】:2019-04-27 00:47:44
【问题描述】:

我有一个使用 express 的 Node 服务器。

我最初使用的是body-parser,但它不允许上传文件。所以,我切换到multer(与express 最简单的集成)。但是,为了得到任何req(特别是req.body),这是我的代码:

var multer = require('multer');
var upload = multer({ dest : 'uploads/' });

server.all('/example', function (req, res, next) {
    var up = upload.single('photo')
    up(req, res, function(err) {
        console.log(req.body); // I can finally access req.body
    });
}

问题在于,并非我的所有路线都需要上传文件。我是否需要浪费 CPU 为每条路线调用 upload.single() 才能访问身体? upload.single('') 最终没有上传任何文件,但这仍然是在主线程上花费的宝贵时间。

看来upload.single() 正在等待回调,所以它可能没有我做的那么重要,但我不喜欢在不需要时调用函数。

有没有办法绕过打电话给upload.single(),还是我只是在做比实际更大的交易?

【问题讨论】:

    标签: node.js express file-upload multer


    【解决方案1】:

    对于纯文本的多部分表单,您可以使用任何 multer 方法,它们是 .single().array()fields()

    例如使用.array()

    var multer = require('multer');
    var upload = multer({ dest : 'uploads/' });
    
    server.all('/example', upload.array(), function (req, res, next) {
        console.log(req.body);
    });
    

    你使用哪个并不重要,只要在没有参数的情况下调用它,Multer 只会为你解析表单的文本字段,而不是文件

    【讨论】:

    • 谢谢,我不知道.fields()。我也在做一些奇怪的事情(不太确定是什么),所以如果我在路由调用中调用upload.xxx(),我就无法访问req,所以我在回调中有额外的逻辑。
    • 根据指南,还有一个 .none() method 专门用于文本字段的非上传处理。
    猜你喜欢
    • 2021-08-27
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2018-10-12
    • 1970-01-01
    相关资源
    最近更新 更多