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

Express接收Angular PUT请求时req.body为undefined解决方案

问题原因

Express 4.x 及以上版本默认不内置请求体解析能力,你当前的服务端仅配置了跨域中间件,没有添加JSON请求体解析逻辑,因此接口中读取httpRequest.body会返回undefined。
你的Angular前端代码没有问题:HttpClient发起PUT请求时,会自动将传入的对象序列化为JSON字符串,同时自动设置正确的Content-Type: application/json请求头,不需要额外调整。

修复方法

在Express服务中,所有业务路由注册之前,添加框架自带的请求体解析中间件即可,修改后的服务端代码如下:

const express = require('express');
const cors = require('cors');

const serverPort = 8080;

const app = express();
app.use(cors({
  origin: ['http://localhost:4200']
}));
// 新增:解析JSON格式请求体
app.use(express.json());
// 新增:解析x-www-form-urlencoded格式请求体(可选,适配表单提交场景)
app.use(express.urlencoded({ extended: true }));

app.put('/set-session-name', (httpRequest, httpResponse) => {
  console.log(httpRequest.body); // 此处可正常拿到 {sessionId: 数值, newName: 字符串} 结构的数据
  httpResponse.sendStatus(200);
});

app.listen(serverPort, () => {
  console.log(`Server running at http://127.0.0.1:${serverPort}`);
})
注意事项
  • 两个请求体解析中间件必须放在app.put、app.post这类业务路由注册代码的前面,否则中间件不会对已注册的路由生效,依然会出现body为undefined的问题。
  • 如果你的请求体是FormData格式(比如文件上传场景),上述中间件无法解析,需要使用multer等专门处理multipart格式的中间件,当前你的场景是普通JSON参数,用自带的express.json()就足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:27:17