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

AWS API Gateway非代理集成REST API调用返回NULL如何解决?

问题1:返回格式不匹配非代理集成要求

你当前Lambda返回的{statusCode, body}结构是Lambda代理集成专用的返回格式,使用非代理集成时API Gateway不会解析这个结构,二选一修复即可:

  • 方案A(推荐,改动更小):在API Gateway的集成请求配置中,直接将集成类型切换为「Lambda代理集成」,原有CORS配置保持不变即可,API Gateway会自动透传Lambda返回的状态码、响应体和头信息。
  • 方案B(保持非代理集成):
    • 修改Lambda返回值,直接返回业务内容即可,不需要包裹statusCode、body结构,比如成功时直接返回{"deviceData": data},报错时直接返回错误信息对象。
    • 在集成响应的200状态配置中新增映射模板,内容类型填application/json,模板内容填$input.path('$'),将Lambda的返回直接透传给前端。

问题2:异步错误未捕获导致返回null

你当前的try/catch只能捕获同步代码异常,ddb.scan(params).promise()是异步操作,它的reject错误不会被现有catch捕获,一旦出现权限不足、表不存在这类问题,就会触发未处理的Promise rejection,Lambda执行异常就会返回null,修改后参考代码如下:

var AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB.DocumentClient({region : 'us-west-2'});

exports.handler = async (event) => {
  console.log("触发事件:", JSON.stringify(event))
  if(event.httpMethod==='GET') {
    console.log("GET method if is called")
    try {
      const data = await readDatabase(event);
      // 代理集成用下方返回
      return {
        statusCode: 200,
        headers: {
          "Access-Control-Allow-Origin": "*"
        },
        body : JSON.stringify({
          "deviceData" : data
        })
      }
      // 非代理集成直接返回 { "deviceData": data } 即可
    } catch (e) {
      console.error("执行错误:", e)
      // 代理集成用下方返回
      return {
        statusCode: 400,
        headers: {
          "Access-Control-Allow-Origin": "*"
        },
        body: JSON.stringify({
          "Message": "Error in Read From Database function",
          "Details": e.message
        })
      }
      // 非代理集成直接返回错误信息对象即可
    }
  }
  // 补充其他请求类型的返回,避免无返回值导致null
  return {
    statusCode: 405,
    body: JSON.stringify({message: "Method Not Allowed"})
  }
};

async function readDatabase(event) {
  console.log("inside readDatabase function")
  let params = {
    TableName: 'devicedata',
  };
  return await ddb.scan(params).promise()
}

问题3:检查Lambda执行角色权限

确认你的Lambda对应的IAM执行角色,已经附加了允许dynamodb:Scan操作的权限策略,资源需要包含你的devicedata表的ARN,没有权限的话scan会直接报错导致返回null。

问题4:部署API生效配置

所有API Gateway的配置修改完成后,必须点击「部署API」并选择对应的部署阶段,否则配置不会生效,依旧会返回旧的结果。

调试建议

先在Lambda控制台使用模拟API Gateway的GET测试事件触发函数,查看返回结果和CloudWatch日志有没有报错,先确认Lambda本身运行正常,再排查API Gateway的配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:48:01