Postman发送form-data类型PUT请求时Express后端req.body为空如何解决
问题原因
- Express 原生仅内置了
express.json()和express.urlencoded()两种请求体解析中间件,仅支持解析application/json和application/x-www-form-urlencoded格式的请求体,本身不支持解析multipart/form-data(form-data)格式的请求体,因此直接接收form-data格式的请求时req.body默认是空对象。 - 你反馈POST请求可正常拿到数据,大概率是发送POST请求时Postman误选了x-www-form-urlencoded格式,而非form-data,和PUT请求的实际发送格式不一致导致的差异。
解决方案
要解析form-data格式的请求体,需要使用专门的解析中间件,最常用的是multer,操作步骤如下:
- 安装multer依赖
npm install multer
- 在对应路由文件中引入并配置multer,若仅需解析普通文本字段、不需要处理文件上传,可配置为仅解析非文件字段:
const multer = require('multer'); // 配置不存储文件,仅解析form-data中的文本字段 const upload = multer().none();
- 给需要接收form-data的PUT/POST路由添加multer中间件:
router.put("/edit/:id", upload, async (req, res) => { try { console.log(req.body); // 可正常输出form-data的字段内容 res.send("success"); } catch (error) { console.log(error); }});
额外注意事项
- 发送form-data请求时,不要在Postman的Header中手动设置
Content-Type: multipart/form-data,Postman会自动生成带boundary参数的正确Content-Type,手动设置缺少boundary会导致解析失败。 - 如果有文件上传需求,可根据multer的配置规则设置存储路径、文件过滤规则即可。
内容的提问来源于stack exchange,提问作者Mohamed Anouar Jabri
相关产品推荐
相关产品推荐

