我的带有 lambda 函数的 AWS API Gateway REST API 返回 Null,如何解决这个问题?
Posted
技术标签:
【中文标题】我的带有 lambda 函数的 AWS API Gateway REST API 返回 Null,如何解决这个问题?【英文标题】:My AWS API Gateway REST API with lambda function is returning Null, How to resolve this? 【发布时间】:2021-11-03 05:48:36 【问题描述】:我是 AWS 的新手,正在尝试学习如何使用 Lambda 函数和 Dynamo DB 制作 REST API(非代理集成)。我已经启用了 cors,在资源中配置了 REST API 的方法请求和方法响应。我的 Lambda 函数代码似乎是正确的,但是当我从 POSTMAN 或响应应用程序调用此 API 时,它返回 NULL。
LAMBDA 函数:-
var AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB.DocumentClient(region : 'us-west-2');
exports.handler = async (event) =>
if(event.httpMethod==='GET')
console.log("GET method if is called")
return readDatabase(event);
;
function readDatabase(event)
try
console.log("inside readDatabase function")
let params =
TableName: 'devicedata',
;
return ddb.scan(params).promise()
.then(data=>
const response =
statusCode: 200,
body : JSON.stringify(
"deviceData" : data
)
return response;
);
catch (e)
let response =
statusCode: 400,
body: JSON.stringify(
"Message": "Error in Read From Database function",
"Details": e
)
return response;
REST API 资源:-
集成响应标头映射:-
方法响应配置:-
启用 Cors 配置:-
这些是配置,但它发送输出为 - “null”。
MY Lambd 函数中的触发器:-
【问题讨论】:
【参考方案1】:首先,您必须检查您的 lambda 函数是否正常工作:您可以使用 lambda 中的预定义测试,如下所示:
然后如果 lambda 工作并且它仍然返回 NULL,请尝试检查 lambda 函数之前和之后的集成请求和响应设置。
【讨论】:
【参考方案2】:我有类似的东西,我的解决方案最终是在我的 lambda 函数中,我需要准确指定正在使用的 httpMethod 和生成的响应,所以您可能会注意到,在您的事件中,httpMethod 是“OPTIONS”,其中相反,您可能意味着它是“POST”或“PUT”,以便在 event.handler 中调用我的 lambda 函数之前处理这个问题,我做了一个像这样的可选条件;
if(event.requestContext.httpMethod === 'OPTIONS')
const response =
statusCode: 200,
headers:
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Methods": "*",
"Content-Type": "*/*",
"Accept": "*/*"
,
return response
let functionResponse = await function(arg2, arg1);
const response =
statusCode: 200,
headers:
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Methods": "*",
"Content-Type": "*/*",
"Accept": "*/*"
,
body: JSON.stringify(functionResponse),
;
return response;
;
【讨论】:
以上是关于我的带有 lambda 函数的 AWS API Gateway REST API 返回 Null,如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda 和 API Gateway 响应集成问题
是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?
带有 Cognito 的 AWS Lambda API 网关 - 如何使用 IdentityId 访问和更新 UserPool 属性?