NextResponse.json疑似破坏JSON语法:修改ID后客户端无法解析响应
Next.js 13.5.3 API路由JSON解析错误排查方案
强制设置正确响应头
手动修改响应数据后,Next.js可能未自动配置正确的Content-Type,导致客户端解析异常。显式设置响应头:export async function GET() { const cmsRes = await fetch('你的CMS接口地址'); const rawData = await cmsRes.json(); // 处理ID(哈希或转字符串) const modifiedData = { ...rawData, id: String(rawData.id) }; return new Response(JSON.stringify(modifiedData), { headers: { 'Content-Type': 'application/json' }, }); }校验未修改字段的合法性
错误指向tagging字段,即使没手动修改,也可能存在隐性问题:- 检查
tagging是否包含未转义的特殊字符(如引号、换行) - 验证CMS返回的
tagging本身是否是合法JSON结构(比如逗号遗漏、括号不匹配) - 单独提取
tagging字段,用JSON.parse()测试能否正常解析
- 检查
避免直接修改原始对象
直接修改CMS返回的原始对象可能触发原型链或隐藏属性问题,建议创建全新对象:const modifiedData = { ...rawData, id: String(rawData.id), // 替换为你的哈希逻辑 tagging: { ...rawData.tagging } // 显式复制嵌套字段 }; return Response.json(modifiedData);对比序列化前后的内容
控制台打印的对象和实际序列化的JSON字符串可能存在差异,比如不可枚举属性或循环引用。在API路由中打印序列化后的字符串,和客户端Network面板的响应内容对比:const jsonStr = JSON.stringify(modifiedData); console.log(jsonStr); // 确保和客户端收到的响应完全一致 return new Response(jsonStr, { headers: {'Content-Type': 'application/json'} });优先使用内置Response.json()
Next.js的Response.json()会自动处理头信息和序列化逻辑,减少手动操作的错误:return Response.json(modifiedData);
内容的提问来源于stack exchange,提问作者biscuitstack
相关产品推荐
相关产品推荐

