express.json()无法获取请求体参数,req.body返回undefined
问题排查与解决
先从代码和请求配置两个核心方向逐一排查:
1. 代码层面的疏漏
你定义了apiLevelMiddleware自定义中间件,但没有将它挂载到Express应用中,缺少关键的app.use(apiLevelMiddleware)语句。如果不挂载,这个中间件根本不会执行,你看到的req.body为空可能是在路由逻辑里打印的结果。
另外要确保中间件的挂载顺序正确:express.json()、express.urlencoded()必须在所有路由和自定义中间件之前挂载(你的代码里这部分是对的),同时自定义中间件要在路由挂载前启用,比如:
// 先挂载解析中间件 app.use(express.json()); app.use(express.urlencoded({ extended: true })); // 再启用自定义中间件 app.use(apiLevelMiddleware); // 最后挂载路由 app.use('/api/chats', chatRouter);
2. Postman请求配置错误
这是req.body为空的最常见原因,根据你使用的请求体格式对应检查:
- 使用
raw格式传JSON时:- 必须在Postman的
Headers标签下设置Content-Type: application/json,否则express.json()中间件不会触发解析,req.body会保持为空。 - 检查JSON内容的语法是否合法,比如引号是否成对、逗号是否正确,格式错误会导致解析失败,最终
req.body为空对象。
- 必须在Postman的
- 使用
x-www-form-urlencoded时:- 确保Postman自动生成的
Content-Type: application/x-www-form-urlencoded存在,你的express.urlencoded({ extended: true })已经支持这种格式,只要键值对填写正确就能正常解析。
- 确保Postman自动生成的
- 使用
form-data时:express.json()和express.urlencoded()都不处理multipart/form-data格式,需要额外安装并配置multer中间件来解析这类请求体,否则req.body会是空对象。
内容的提问来源于stack exchange,提问作者Kingsley Akindele
相关产品推荐
相关产品推荐

