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

调用AWS API Gateway返回Undefined问题求助

问题排查方案

核心问题大概率是你对API返回的数据结构判断错误,别直接硬取data.body,先通过调试确认实际返回结构:

第一步:先打印完整返回数据,明确结构

修改你的JavaScript代码,新增一行打印语句,查看浏览器控制台里的真实返回内容:

<script>
        fetch("https://myapi/get")
        .then(response => response.json())
        .then(data => {
        console.log(data); // 新增该行,在浏览器控制台查看完整返回结构
        document.getElementById("website-counter").innerHTML = data.body
        });
</script>

打开浏览器开发者工具(按F12)切换到「Console」标签,刷新页面就能看到完整的返回JSON,比如可能是{ views: 123 }或{ Item: { count: 456 } },这时候你就知道该取哪个字段,而不是盲目用data.body。

常见错误场景及修正

场景1:API Gateway使用Lambda代理集成

如果你的API是Lambda代理集成,Lambda的返回格式通常是这样:

// Lambda函数内的返回代码示例
return {
  statusCode: 200,
  headers: {
    "Access-Control-Allow-Origin": "*"
  },
  body: JSON.stringify({ views: 100 }) // 实际数据转成JSON字符串
};

此时API Gateway会自动解析body字段的JSON字符串,前端fetch拿到的data就是{ views: 100 },你应该写data.views而非data.body——这时候data.body自然是undefined。

场景2:Lambda直接返回原始数据(非代理集成)

如果是自定义集成,Lambda直接返回DynamoDB查询结果,比如:

// Lambda直接返回DynamoDB的Item
return { views: 100 };

API Gateway返回的data就是这个对象,你需要取对应字段(比如data.views),同样不存在data.body字段。

特殊情况:返回的body是未解析的JSON字符串

如果AWS控制台调用API时,返回结构是类似这样的:

{
  "body": "{\"views\":123}"
}

那前端需要先解析body字段的JSON字符串,代码要改成:

document.getElementById("website-counter").innerHTML = JSON.parse(data.body).views

内容的提问来源于stack exchange,提问作者sjb_1981

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:27:28