Next.js后端创建产品API出现JSON解析错误:SyntaxError: No number after minus sign in JSON at position 1
Next.js后端创建产品API出现JSON解析错误:SyntaxError: No number after minus sign in JSON at position 1
看起来这个JSON解析错误是请求刚进入API路由时就触发的,错误栈明确指向了req.json()这一步(对应你代码里的第94行)。这个错误提示的核心是:请求体的JSON语法在最开头就出了问题——第一行第二列的位置是个减号,但后面没有紧跟数字,完全不符合JSON的规范。
我来帮你一步步排查和解决这个问题:
第一步:定位问题根源
这个错误100%是实际发送到后端的请求体不符合JSON格式,和你提供的payload示例大概率有差异。你可以按下面的步骤快速定位:
查看真实的请求原始内容
打开浏览器DevTools(F12)切换到Network标签,找到这个POST请求,查看「Payload」里的「Raw」内容:- 重点看请求体最开头,是不是多了个减号?比如是不是类似
-{"name": "title", ...}这种格式? - 整体扫一遍JSON,有没有双引号不闭合、多余逗号,或者base64数据里混入了破坏JSON结构的字符。
- 重点看请求体最开头,是不是多了个减号?比如是不是类似
确认请求头是否正确
确保前端发送请求时,设置了Content-Type: application/json的请求头:- 如果用
fetch,要保证body是JSON.stringify(yourPayload),同时headers里显式声明Content-Type: 'application/json' - 如果用
axios,默认会自动处理头信息,但如果手动修改过,要确认没改错。
- 如果用
临时加代码调试请求体
你可以临时修改API路由的代码,先打印原始请求体,看看后端实际收到的内容是什么:// 替换原来的 const productData = await req.json(); const rawBody = await req.text(); console.log("=== 原始请求体内容 ==="); console.log(rawBody); // 再尝试解析并捕获错误 try { const productData = JSON.parse(rawBody); } catch (parseErr) { console.error("JSON解析错误详情:", parseErr); }这样你就能在后端控制台直接看到真实的请求内容,瞬间定位问题点。
常见原因和对应解决办法
- 前端误发了非JSON格式请求:比如前端用
FormData发送数据(而不是JSON),那req.json()肯定会解析失败。这种情况要么让前端改成JSON格式发送,要么后端改用req.formData()来处理。 - base64数据处理失误:虽然你说base64是正确的,但如果前端把base64放到JSON里时,意外混入了未转义的特殊字符(比如双引号
"),也会破坏JSON结构。不过正常base64不会包含双引号,这个概率较低,但可以排查下。 - 中间件修改了请求体:如果你的项目里有Next.js中间件,检查下是不是中间件对请求体做了额外修改,比如不小心添加了多余字符。
小代码优化建议
虽然和当前错误无关,但可以给你个小提醒:你处理base64的逻辑可以加个try-catch,避免因为base64解析失败导致整个请求崩溃,让代码鲁棒性更强。
先按上面的步骤排查真实的请求内容,应该很快就能找到问题所在啦!
备注:内容来源于stack exchange,提问作者Erenay
相关产品推荐
相关产品推荐

