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

提交字符串导致Express body-parser抛出SyntaxError异常

解决Express body-parser解析单独JSON字符串报错的问题

这个问题我之前也碰到过!其实问题出在body-parser的默认配置上——虽然单独的字符串"test"确实是合法的JSON,但body-parser的json()中间件默认开启了strict模式,这个模式下只允许**JSON对象({})或数组([])**作为顶层结构,单独的字符串、数字、布尔值这些都会被判定为语法错误。

给你两种可行的解决办法:

方法一:关闭body-parser的strict模式

直接在配置json()中间件时添加strict: false选项,这样就能允许顶层的非对象/数组JSON值了:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// 关闭strict模式,支持解析顶层字符串、数字等JSON值
app.use(bodyParser.json({ strict: false }));

app.post('/your-api', (req, res) => {
  console.log(req.body); // 现在能正确输出 "test"
  res.status(200).send('解析成功');
});

app.listen(3000, () => {
  console.log('服务启动在3000端口');
});

注意:如果你的Express版本是4.16.0及以上,Express已经内置了body-parser的功能,可以直接用app.use(express.json({ strict: false })),无需单独安装body-parser包。

方法二:调整请求的JSON格式

如果不想修改中间件配置,也可以把请求的JSON内容包装成对象或数组,比如发送:

  • 对象形式:{"value": "test"}
  • 数组形式:["test"]
    这样默认的strict模式就能正常解析,你可以通过req.body.value或req.body[0]拿到对应的字符串值。

内容的提问来源于stack exchange,提问作者mitchkman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:32:26