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

Express 4.17.1中request.body返回空对象 Postman正常前端调用失败

问题排查方案

1. 调整Express中间件与路由的注册顺序

Express的中间件、路由按照代码声明的先后顺序执行,必须保证app.use(express.json())写在所有接口路由的前面。如果你的/test接口路由注册在JSON解析中间件之前,该路由不会触发解析逻辑,req.body自然返回空对象。

错误写法示例

app.post('/test', (req, res) => {
  console.log(req.body) // 输出空对象
})
app.use(express.json())
app.use(cors())

正确写法示例

app.use(express.json())
app.use(cors())
// 所有路由必须放在内置中间件声明之后
app.post('/test', (req, res) => {
  console.log(req.body) // 可正常获取解析后的JSON数据
})

2. 修正请求头拼写规范

前端fetch配置中的请求头Content-type写法不规范,标准写法为Content-Type(T为大写),部分严格的服务端环境无法识别小写的请求头,导致无法触发JSON解析逻辑:

fetch('http://localhost:9000/test', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json' // 修正为标准写法
  },
  body: JSON.stringify(myData)
})

3. 处理跨域预检请求

跨域POST请求会先发送OPTIONS类型的预检请求,若未对该类请求做放行处理,会导致请求体解析异常。可以在所有路由前添加预检请求处理逻辑:

app.use(express.json())
app.use(cors())
// 放行所有OPTIONS预检请求
app.options('*', cors())

4. 排查前置中间件是否提前消费请求流

如果项目中存在自定义中间件、鉴权/日志类第三方中间件在express.json()之前执行,且中间件内部提前消费了请求的可读流,也会导致后续JSON解析逻辑无法拿到请求体数据。可以临时注释掉express.json()之前的其他中间件逐一排查。

内容的提问来源于stack exchange,提问作者Dayana Scott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:02