Express.js中POST请求的字符串无法解析问题如何解决?
问题根因
- 你使用的
express.json()默认开启strict: true配置,仅支持解析JSON对象/数组格式的请求体,直接传入纯字符串会被判定为无效JSON,导致request.body为空对象 - 没有配置解析纯文本请求的中间件,
text/plain类型的请求体无法被正常解析 - 路由代码中日志打印的是
response.body(响应对象的body,未赋值时默认不存在),而非你需要的request.body(请求体内容) - 旧写法
app.use(bodyParser())已被废弃,无法按预期解析不同类型的请求体
解决方案
- 替换原有bodyParser配置,使用Express内置的解析中间件,开启非严格JSON解析和纯文本解析能力:
// 注释或删除原有的 app.use(bodyParser()); app.use(express.json({ strict: false })); // 允许解析非对象/数组的合法JSON值(字符串、数字等) app.use(express.text()); // 解析Content-Type为text/plain的纯文本请求体
- 修正POST路由中的日志和逻辑:
app.post('/data',(request,response,next)=>{ console.log(request.body); // 打印请求体内容,而非响应体 response.status(200).json({message:request.body}); })
- 请求时设置对应Content-Type请求头:
- 若传入带引号的JSON格式字符串(如
"XYZ"),请求头设置为Content-Type: application/json - 若传入不带引号的纯文本(如
XYZ),请求头设置为Content-Type: text/plain
验证示例
使用curl发起测试请求:
- 测试JSON格式字符串请求:
curl -X POST -H "Content-Type: application/json" -d '"XYZ"' http://localhost:4000/data
返回结果:
{ "message": "XYZ" }
- 测试纯文本请求:
curl -X POST -H "Content-Type: text/plain" -d 'XYZ' http://localhost:4000/data
返回结果:
{ "message": "XYZ" }
内容的提问来源于stack exchange,提问作者Parth Kamal
相关产品推荐
相关产品推荐

