Node.js项目JSON解析语法错误的根源排查及解决建议
排查建议
- 先验证接口返回的JSON合法性:在GET路由里直接
console.log要返回的原始数据,复制出来在Node环境里用JSON.parse()测试,看是否抛出相同错误。重点检查新增列的数据,有没有未转义的双引号、换行符、特殊字符,或者Buffer这类无法被JSON序列化的类型。 - 限制
express.json()的作用范围:默认这个中间件会尝试解析所有带application/json请求头的请求,哪怕是GET请求。可以给它加配置,只处理需要请求体的HTTP方法:
这样GET请求就不会触发JSON解析逻辑,避免无意义的报错。server.use(express.json({ type: ['application/json'], methods: ['POST', 'PUT', 'PATCH', 'DELETE'] })) - 检查请求头配置:用Insomnia查看GET请求的请求头,确认没有误设置
Content-Type: application/json。正常GET请求不需要这个头,一旦设置,express会尝试解析请求体(哪怕是空的),格式不对就会报错。 - 规范响应发送方式:路由里统一用
res.json(data)返回数据,而不是res.send(data)。res.json会自动把数据序列化为合法JSON,并设置正确的Content-Type响应头,避免手动序列化出错。 - 排查新增列的数据处理:如果新增列存了SQLite的特殊类型(比如BLOB、TEXT里的特殊编码),在查询后要做转换,比如把Buffer转成base64字符串,或者过滤掉无法序列化的字段。
- 确认中间件顺序:确保
express.json()注册在所有路由之前,避免其他中间件修改请求头导致解析逻辑异常。
内容的提问来源于stack exchange,提问作者spraggie
相关产品推荐
相关产品推荐

