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

原生JS(Vanilla Js)Ajax发送POST请求后Express req.body为空的问题

根因定位
  • 前端XHR发送POST请求时,显式设置请求头Content-Type: application/json,通过JSON.stringify将数组序列化为JSON字符串作为请求载荷。
  • 服务端仅注册了express.urlencoded({extended:true})中间件,该中间件仅支持解析application/x-www-form-urlencoded格式的表单请求体,不具备JSON格式请求体的解析能力,请求内容不会被挂载到req.body上,因此打印结果始终为空对象。
修复方案
  • 在服务端中间件配置段,补充Express内置的JSON解析中间件,注意所有请求体解析中间件必须注册在所有路由处理逻辑之前,与现有urlencoded中间件相邻放置即可:
    // 新增以下代码,专门解析application/json格式的请求体
    app.use(express.json());
    app.use(express.urlencoded({extended:true}));
    
    说明:Express 4.16及以上版本已内置该JSON解析能力,无需额外安装body-parser第三方依赖。
  • 修复完成后重新触发前端POST请求,服务端req.body会正常接收到前端发送的['xyz']数组数据,不再出现空对象问题。
避坑提示
  • 请求体解析类中间件的注册顺序必须早于对应路由的处理逻辑,如果将中间件写在路由定义之后,解析逻辑完全不会生效。
  • 无需强行修改前端Content-Type配置适配现有中间件,如果改为表单格式提交,需要手动对前端发送的数组/对象做表单序列化处理,否则依然会出现req.body为空的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 06:24:03