【问题标题】:Why request body is null in file upload with postman in Node.js为什么在Node.js中使用邮递员上传文件时请求正文为空
【发布时间】:2019-07-25 22:51:34
【问题描述】:

我正在尝试将文件从邮递员上传到 Node.js 服务器。我正在使用 multer 和 body-parse 来解析请求的正文。

用例:

  1. 当我在 Postman 中使用原始 JSON 作为正文的 POST 请求时,一切 工作正常,我可以看到与 Postman 中提供的完全一样的 req.body,而且我可以为 req.body 分配新的键值对,以便这些新变量可以在路由中的其他中间件中使用。
  2. 但是,当我尝试从邮递员上传文件时,在邮递员中使用表单数据作为正文,然后我仍然可以从 req.body 中获取所提供的值。但是在 multer 中间层之后,新分配给 req.body 的值(来自中间件)显示损坏,如 req.body 变为 [Object: null prototype]。我可以确认 Multer 工作正常,但 Multer 正在破坏 req.body 数据(在路由中间件本身中创建)

请帮忙识别req.body=[Object: null prototype]的含义

【问题讨论】:

  • 发布您的 multer 的一些代码并指定您收到错误的位置。此外,请确保未发送像 Content-type 那样的标头未选中。知道body-parser 不会解析req.body,因为您将所有数据作为multipart/form-data 发送,multer 处理。
  • 在网页提交文件上传表单时有效吗?你能附上一些关于邮递员配置的截图吗?

标签: node.js http postman multer body-parser


【解决方案1】:

您可以使用express-busboy。将此添加到您的主页:

const expressBusboy = require('express-busboy');
expressBusboy.extend(app);

这将解析您的表单数据。

【讨论】:

    【解决方案2】:

    Shivam Mahajan 几乎照原样写了,但是:

    您可以访问不在req.{Name_of_field} 中的文本字段,而是req.body.{Name_of_field},如multer docs 中所述。

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题。如果你在函数中使用 console.log(req.body)。你会注意到 body 等于 [Object: null prototype] 因为 Multer 正在处理请求,因为表单是多部分的。因此,如果您使用 console.log(req) 对象,您可以找到可以检索的值,您只需执行 req.{Name_of_field} 即可获取值。

      如果您需要澄清,请告诉我,我也许可以分享代码。

      【讨论】:

        猜你喜欢
        • 2018-10-22
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 2021-03-21
        • 2023-03-04
        • 2018-06-25
        • 2016-09-06
        • 1970-01-01
        相关资源
        最近更新 更多