如果我不使用 multer 表达式 JS 请求正文为空



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

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

这一点都不奇怪。

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

FormData接口提供了一种轻松构建一组表示表单字段及其值的键/值对的方法,然后可以使用XMLHttpRequest.send((方法轻松发送这些键/值。它使用的格式与如果编码类型设置为"0"则表单将使用的格式相同;多部分/形式数据";。

Multer用于解析多部分请求。

urlencoded中间件设计用于解析url编码的请求,而不是多部分请求。

json中间件设计用于解析JSON编码的请求,而不是多部分请求。

最新更新