如果我不使用 multer,ExpressJS 请求正文为空
ExpressJS request body is empty if i don't use multer
我的 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);
}
这没什么奇怪的。
FormData 个对象生成多部分请求。他们必须这样做,这就是他们支持文件上传的方式。
The FormData interface provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to "multipart/form-data".
Multer 旨在解析多部分请求。
urlencoded
中间件旨在解析 urlencoded 请求,而不是多部分请求。
json
中间件旨在解析 JSON 编码请求,而不是多部分请求。
我的 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);
}
这没什么奇怪的。
FormData 个对象生成多部分请求。他们必须这样做,这就是他们支持文件上传的方式。
The FormData interface provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to "multipart/form-data".
Multer 旨在解析多部分请求。
urlencoded
中间件旨在解析 urlencoded 请求,而不是多部分请求。
json
中间件旨在解析 JSON 编码请求,而不是多部分请求。