提交字符串导致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
相关产品推荐
相关产品推荐

