ExpressJS+TypeScript环境下body-parser解析POST请求体为空求助
解决Express + TypeScript中req.body为空的问题
可能的原因及解决方案
1. Postman请求配置错误
- 确认请求体选择raw格式,并且右侧下拉框明确选中JSON(不是Text或其他格式),否则Postman可能无法正确设置
Content-Type头,导致解析失败。 - 手动检查请求头中
Content-Type: application/json是否存在,避免Postman自动覆盖该头。
2. Express中间件兼容问题
Express 4.16+已内置body-parser的核心功能,无需单独依赖body-parser包(可卸载该依赖),改用内置方法更稳定:
修改app.ts:
import express, { Application, Request, Response } from 'express'; import morgan from 'morgan'; // 移除body-parser的导入 import cors from 'cors'; const app: Application = express(); app.use(cors()); // 替换为express内置的解析方法 app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use(morgan('tiny')); app.post('/test', (req: Request, res: Response) => { console.log("req.body => ", req.body) res.send(req.body) }) export default app;
3. Dev脚本未正确运行最新TypeScript代码
你的dev脚本未指定用ts-node执行TypeScript文件,可能导致nodemon运行旧的build/index.js而非最新代码。修改脚本:
"scripts": { "start": "node build/index.js", "build": "tsc", "dev": "cross-env NODE_ENV=development nodemon --exec ts-node index.ts", ... }
或创建nodemon.json配置文件:
{ "watch": ["."], "ext": "ts", "exec": "ts-node index.ts" }
4. 用curl测试排除Postman问题
如果以上步骤无效,用curl命令发送请求,确认问题是否出在Postman:
curl -X POST http://localhost:8080/test \ -H "Content-Type: application/json" \ -d '{"title": "Testing", "description": "I am testing server."}'
查看控制台输出是否正常。
内容的提问来源于stack exchange,提问作者bcExpt1123
相关产品推荐
相关产品推荐

