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

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示例大概率有差异。你可以按下面的步骤快速定位:

  1. 查看真实的请求原始内容
    打开浏览器DevTools(F12)切换到Network标签,找到这个POST请求,查看「Payload」里的「Raw」内容:

    • 重点看请求体最开头,是不是多了个减号?比如是不是类似-{"name": "title", ...}这种格式?
    • 整体扫一遍JSON,有没有双引号不闭合、多余逗号,或者base64数据里混入了破坏JSON结构的字符。
  2. 确认请求头是否正确
    确保前端发送请求时,设置了Content-Type: application/json的请求头:

    • 如果用fetch,要保证body是JSON.stringify(yourPayload),同时headers里显式声明Content-Type: 'application/json'
    • 如果用axios,默认会自动处理头信息,但如果手动修改过,要确认没改错。
  3. 临时加代码调试请求体
    你可以临时修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:18:10