TypeScript中Express的req.body为undefined/空对象问题求助
解决Express + TypeScript中req.body返回undefined/空对象的问题
以下是针对你遇到问题的排查方向和解决方案:
1. 检查中间件注册顺序
express.json()必须在所有路由注册之前执行,否则路由处理请求时,请求体还未被解析。确保代码顺序如下:
const app = express(); // 先注册解析中间件 app.use(express.json()); // 若需要处理urlencoded格式请求,需添加此中间件 app.use(express.urlencoded({ extended: true })); // 再注册路由 app.use(router);
2. 确认请求头与对应中间件匹配
- 发送JSON格式请求时,必须在请求头中设置
Content-Type: application/json,否则express.json()不会触发解析,req.body会是undefined。 - 发送urlencoded格式请求时,仅靠
express.json()无法解析,必须添加express.urlencoded({ extended: true })中间件,同时请求头需设置Content-Type: application/x-www-form-urlencoded。
3. 验证TypeScript类型导入正确性
确保你使用的Request和Response类型来自express库,避免类型不匹配导致的推断问题:
// 正确导入 import { Request, Response } from 'express'; const signupUser = (req: Request, res: Response): void => { try { console.log(req.body); res.send(req.body); } catch (e) { handleHttp(res, 'ERROR_POST_ITEM'); } };
4. 检查请求体格式合法性
若JSON格式存在语法错误(如引号不闭合、多余逗号),express.json()会解析失败,导致req.body为空对象。在Postman/RapidAPI中验证请求体的JSON语法是否正确。
内容的提问来源于stack exchange,提问作者Yebrai
相关产品推荐
相关产品推荐

