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

Express.js中POST请求的字符串无法解析问题如何解决?

问题根因

  • 你使用的express.json()默认开启strict: true配置,仅支持解析JSON对象/数组格式的请求体,直接传入纯字符串会被判定为无效JSON,导致request.body为空对象
  • 没有配置解析纯文本请求的中间件,text/plain类型的请求体无法被正常解析
  • 路由代码中日志打印的是response.body(响应对象的body,未赋值时默认不存在),而非你需要的request.body(请求体内容)
  • 旧写法app.use(bodyParser())已被废弃,无法按预期解析不同类型的请求体

解决方案

  1. 替换原有bodyParser配置,使用Express内置的解析中间件,开启非严格JSON解析和纯文本解析能力:
// 注释或删除原有的 app.use(bodyParser());
app.use(express.json({ strict: false })); // 允许解析非对象/数组的合法JSON值(字符串、数字等)
app.use(express.text()); // 解析Content-Type为text/plain的纯文本请求体
  1. 修正POST路由中的日志和逻辑:
app.post('/data',(request,response,next)=>{
    console.log(request.body); // 打印请求体内容,而非响应体
    response.status(200).json({message:request.body});
})
  1. 请求时设置对应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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:09:02