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

前端fetch()发送PUT请求后端Express获取req.body为undefined如何解决

问题成因
  1. 最核心的原因是Express默认不会自动解析请求体内容,你没有在服务端注册JSON格式请求体的解析中间件,前端传的Content-Type: application/json格式的请求数据没有被解析挂载到req.body对象上,所以读取的时候为undefined。
  2. 少数场景下也可能是中间件注册顺序错误,解析请求体的中间件在路由挂载之后才注册,请求进入路由处理逻辑时还没有经过解析处理。
解决方案

步骤1:注册JSON解析中间件

Express 4.16.0及以上版本已经内置了JSON解析能力,直接在路由挂载代码前添加以下配置即可:

// 要放在 app.use('/articles', routes.articles) 之前执行
app.use(express.json());

如果你的Express版本低于4.16.0,需要先安装body-parser依赖,再注册对应的解析中间件:

npm install body-parser

然后在服务端入口文件添加配置:

const bodyParser = require('body-parser');
// 放在路由挂载之前
app.use(bodyParser.json());

额外问题修复

你当前的服务端路由代码还有一个逻辑错误:res.end()的调用时机提前,会导致数据库更新操作还没完成就给客户端返回响应,而且res.status(500).send只能接收一个参数,错误信息需要合并为单个参数传递,调整后的路由代码参考:

router.route('/put/:_id').put((req, res) => {
  const _id = req.params._id;
  const obj = req.body;
  debug && console.log('DEBUG: route: /articles/put : req.body', req.body);
    
  DBM.updateArticle(_id, obj)
    .then(() => {
      res.status(200).end();
    })
    .catch((err)=>{
      res.status(500).send(`DEBUG: database internal error: ${err}`);
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:09:01