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
相关产品推荐
相关产品推荐

