Express中POST请求req.body为空问题求助
解决Express中POST请求req.body为空的问题
问题分析
你当前的代码已经配置了express.json()和express.urlencoded({ extended: true }),但这两个中间件仅能处理application/json和application/x-www-form-urlencoded格式的请求,无法解析Postman里的form-data(multipart/form-data)类型;另外raw格式请求需要严格匹配请求头与请求体格式,否则也会导致解析失败。
分场景解决方案
1. 处理Postman中form-data格式的请求
form-data属于multipart类型,需要额外安装并配置multer中间件来解析:
- 安装multer依赖
npm install multer
- 在
app.js中配置multer(全局生效)
import express from 'express'; import multer from 'multer'; import router from './router.js'; const app = express(); const port = 3000; // 配置为仅解析数据,不保存文件到磁盘 const upload = multer({ storage: multer.memoryStorage() }); app.use(express.json()) app.use(express.urlencoded({ extended: true })) // 全局应用multer解析所有form-data请求 app.use(upload.any()); app.use('/', router) app.listen(port, () => { console.log(`App listening at http://localhost:${port}`); });
- 或者仅在目标路由单独配置
修改router.js中的对应路由:
import express from 'express' import multer from 'multer'; const router = express.Router() const upload = multer({ storage: multer.memoryStorage() }); router.post('/myurl', upload.any(), (req, res) => { console.log('req', req.body) }) export default router
2. 处理Postman中raw格式的请求
必须满足两个条件:
- 在Postman的请求头中,将
Content-Type设置为application/json - 请求体是合法的JSON格式,示例:
{ "name": "test", "age": 20 }
注意避免语法错误(比如引号不闭合、多余逗号),否则express.json()无法解析,req.body会保持为空。
额外检查项
- 确认Postman请求URL与你的路由
/myurl完全匹配,无拼写错误 - 确保中间件加载顺序正确:
express.json()、express.urlencoded()、multer必须在app.use('/', router)之前配置,否则中间件不会生效
内容的提问来源于stack exchange,提问作者GinDev
相关产品推荐
相关产品推荐

