You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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为空对象。
  • 使用x-www-form-urlencoded时:
    • 确保Postman自动生成的Content-Type: application/x-www-form-urlencoded存在,你的express.urlencoded({ extended: true })已经支持这种格式,只要键值对填写正确就能正常解析。
  • 使用form-data时:
    • express.json()和express.urlencoded()都不处理multipart/form-data格式,需要额外安装并配置multer中间件来解析这类请求体,否则req.body会是空对象。

内容的提问来源于stack exchange,提问作者Kingsley Akindele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:36:26