使用Prisma+NodeTS开发API时Insomnia测试报JSON解析错误求助
JSON解析报错排查方案
你的后端服务代码本身没有结构性问题,报错来自请求体解析阶段,是发送的请求不符合JSON解析要求导致的。
核心原因
你在Insomnia中填写的请求体开头{前夹带了一个不可见的零宽空格字符,body-parser在执行JSON.parse时遇到非法起始字符,直接抛出语法错误。
另外两种常见的同类触发场景:
- Insomnia请求体格式选错,没有选
JSON类型,导致请求头Content-Type不是application/json,或者传了非JSON格式的内容 - 手写JSON时存在语法错误:比如尾逗号、中文引号、括号不配对,不过你贴出的可见JSON内容语法是正确的
修复操作
- 清空Insomnia当前请求的请求体输入框,手动逐行输入合法JSON,不要直接复制带隐形格式的外部内容:
{ "name": "Eduard", "email": "Eduard@edu.com", "password": "1234" }
- 确认请求体格式下拉选项选中
JSON,Insomnia会自动带上正确的Content-Type: application/json请求头 - 重新发起POST请求到
http://localhost:3333/users即可正常创建用户
可选代码优化
你当前代码缺少两类兜底逻辑,建议补上避免后续出现难排查的问题:
- 放开重复用户校验的注释,避免重复邮箱触发Prisma唯一键报错:
// createUserUseCase.ts 内补全校验 if (userAlreadyExists) { throw new Error("当前邮箱已注册") }
- 在路由配置后增加全局错误捕获中间件,统一处理JSON解析错误、业务报错,避免直接把服务端堆栈抛给客户端:
// 放在 app.use(routes) 之后 app.use((err: Error, req: Request, res: Response, next) => { // 捕获JSON解析错误 if (err.name === 'SyntaxError' && (err as any).type === 'entity.parse.failed') { return res.status(400).json({ message: "请求体格式错误,请传入合法JSON" }) } // 其他业务错误统一返回 return res.status(500).json({ message: err.message || "服务器内部异常" }) })
内容的提问来源于stack exchange,提问作者Eduard Wild
相关产品推荐
相关产品推荐

