Node.js Express POST接口用curl发JSON报Unexpected token u错误解决方案
问题原因
- 报错的核心是服务端
express.json中间件解析请求体时,收到了不符合JSON语法规范的内容,解析失败抛出错误。 - 你的问题是Windows平台原生命令行(CMD/PowerShell)的单引号处理规则导致:Windows命令行不支持将单引号识别为字符串边界符,执行你给出的curl命令时会自动丢弃
-d参数后的单引号,实际发送的请求体为{user:"jane.doe"},不符合JSON要求键必须用双引号包裹的规范,因此解析到第2个字符(位置1的u)时触发语法错误。
修复方案
你可以根据自己的使用场景选择以下任意一种方案:
方案1:修改curl命令适配Windows CMD环境
把参数外层的单引号替换为双引号,同时转义JSON内部的双引号即可:
curl -X POST -d "{\"user\":\"jane.doe\"}" -H "Content-Type: application/json" http://localhost:3000/
方案2:适配PowerShell环境
PowerShell的转义规则更严格,可选择以下任意一种写法:
# 写法1:JSON内部双引号重复两次实现转义 curl -X POST -d '{""user"":""jane.doe""}' -H "Content-Type: application/json" http://localhost:3000/ # 写法2:添加--%参数禁用PowerShell的解析逻辑 curl -X POST --% -d "{\"user\":\"jane.doe\"}" -H "Content-Type: application/json" http://localhost:3000/
方案3:跨平台通用方案(无转义问题)
将JSON内容写入独立文件,curl直接读取文件内容发送,彻底避免命令行转义问题:
- 新建
data.json文件,写入合法JSON内容:
{"user":"jane.doe"}
- 执行curl命令:
curl -X POST -d @data.json -H "Content-Type: application/json" http://localhost:3000/
非核心优化建议
你当前的POST接口代码中,res.send写在console.log之前,虽不影响现有功能,但建议把响应返回逻辑放在业务逻辑之后,避免后续新增逻辑时出现「响应已发送仍执行后续代码」的异常。
内容的提问来源于stack exchange,提问作者ma_PG_
相关产品推荐
相关产品推荐

