【问题标题】:ExpressJS request body is empty if i don't use multer如果我不使用 multer,ExpressJS 请求正文为空
【发布时间】:2021-08-27 07:24:09
【问题描述】:

我的 express 应用程序有一个非常奇怪的问题,我只是想访问通过表单数据通过 post 请求发送的 req.body 数据,但不幸的是,当我尝试访问 request.body 中的这些值时出现未定义的错误但奇怪的是,如果我使用 multer 中间件(我在另一条路线上使用它来上传文件)我没有收到这个错误。 我已经配置了 express 提供的默认正文解析器。

//body pharser
app.use(express.json());
app.use(
  express.urlencoded({
    extended: true,
  })
);

//multer configuration
const ImageUpload = multer({
  storage: storage,
  limits: { fileSize: 4194304 },
  fileFilter: Imagfilter,
});

//this will return undefined
app.post("/available",(req, res) => {
  console.log(req.body.name);
}

//but this will return the value without any issues
app.post(
  "/available",
  ImageUpload.fields([
    { name: "nicImageFront", maxCount: 1 },
    { name: "nicImageBack", maxCount: 1 },
  ]),
  (req, res) => {
 console.log(req.body.name);
}

【问题讨论】:

    标签: javascript express multer


    【解决方案1】:

    这没什么好奇怪的。

    FormData 对象生成多部分请求。他们必须这样做,这是他们支持文件上传的方式。

    FormData 接口提供了一种方法来轻松构造一组表示表单字段及其值的键/值对,然后可以使用 XMLHttpRequest.send() 方法轻松发送。如果编码类型设置为“multipart/form-data”,它使用与表单相同的格式。

    Multer 旨在解析多部分请求。

    urlencoded 中间件旨在解析 urlencoded 请求,而不是多部分请求。

    json 中间件旨在解析 JSON 编码请求,而不是多部分请求。

    【讨论】:

    • 谢谢,我明白了,我误解了multer的用法
    猜你喜欢
    • 2019-04-12
    • 2021-08-29
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多