AWS API Gateway调用报Unexpected end of JSON input错误排查求助
问题排查方案
关于Unexpected end of JSON input错误的常见原因
这个错误本质是前端尝试解析空响应或非JSON格式内容导致的,结合你的场景,重点排查以下两点:
1. Lambda函数返回格式不规范
API Gateway控制台的测试逻辑和前端请求的处理逻辑不同,Lambda必须返回API Gateway要求的标准响应格式,否则前端会拿到无效响应。
正确的Node.js Lambda返回示例:
exports.handler = async (event) => { // 从DynamoDB获取数据的逻辑 const productData = await yourDynamoDBQueryFunction(event.queryStringParameters.productId); // 必须返回包含statusCode、headers、JSON序列化body的结构 return { statusCode: 200, headers: { "Access-Control-Allow-Origin": "*", // 测试阶段临时允许所有跨域请求 "Content-Type": "application/json" }, body: JSON.stringify(productData) // 务必用JSON.stringify把对象转成字符串 }; };
如果你的Lambda直接返回原始对象(比如return productData),API Gateway无法正确处理,会返回空或非JSON响应,导致前端解析失败。
2. CORS配置问题(可能间接触发该错误)
正常的CORS报错会在浏览器控制台显示类似No 'Access-Control-Allow-Origin' header is present on the requested resource的提示,但如果CORS配置错误导致浏览器直接拦截响应内容,前端拿到空数据,调用response.json()时就会触发Unexpected end of JSON input错误。
具体排查步骤
- 第一步:检查Lambda返回结构
确认Lambda返回的是上述标准格式,重点核对body是JSON序列化后的字符串,同时包含跨域相关headers。 - 第二步:用浏览器DevTools查看实际请求
打开浏览器F12进入Network面板,调用fetchData函数后找到对应请求:- 查看
Response标签,确认返回内容是合法的JSON字符串;如果为空,说明API未返回有效数据。 - 查看
Headers标签,检查是否存在Access-Control-Allow-Origin头;如果没有,说明CORS配置有问题。
- 查看
- 第三步:重新配置并部署API Gateway的CORS
在API Gateway控制台找到你的product资源:- 点击
Actions->Enable CORS - 允许的源(Allowed Origins)填
*(测试用,正式环境替换为你的前端域名) - 允许的方法(Allowed Methods)勾选
GET - 配置完成后必须点击
Deploy API,选择你的部署阶段(stage),否则配置不会生效。
- 点击
内容的提问来源于stack exchange,提问作者Yolo_chicken
相关产品推荐
相关产品推荐

