AWS Lambda nodejs函数中的事件对象为空

p4tfgftt  于 2023-04-11  发布在  Node.js
关注(0)|答案(5)|浏览(150)

我正在使用Lambda函数查询RDS MySQL数据库。为了获取行,我将主键作为URL中的参数传递(使用AWS API Gateway)。示例URL是:
https://aaaaaaa.execute-api.aaaaaaa.amazonaws.com/default/getresult?pk=1245
在Lambda函数中,

exports.handler =  (event, context, callback) => {
  //prevent timeout from waiting event loop
  callback(null, event);

};

我得到的输出为{}的网址。

注意:Lambda代理集成开启。

a64a0gku

a64a0gku1#

应在API网关上启用Lambda代理集成,以便API网关将事件详细信息(包括参数)传递给Lambda。
有关如何在控制台中执行此操作,请参阅此图像:

转到您的API,然后是资源,然后是方法执行,然后选择“集成请求”。从那里勾选“使用Lambda代理集成”的框。
启用此选项允许API Gateway将请求代理到Lambda,并在事件中提供请求详细信息,包括参数。

gijlo24d

gijlo24d2#

确保选中Use Lambda Proxy Integration复选框,这将在API Gateway的方法和关联的Lambda函数之间建立Lambda-Proxy类型的集成。
通过Lambda代理集成,Lambda需要返回以下格式的输出(doc):

{
  "isBase64Encoded" : "boolean",
  "statusCode": "number",
  "headers": { ... },
  "body": "JSON string"
}

这意味着如果你想把event对象发送回客户端,你必须把一个以上格式的对象放到callback中。

exports.handler = (event, context, callback) => {
  //prevent timeout from waiting event loop
  const response = {
    statusCode: 200,
    headers: {
      "x-custom-header": "my custom header value"
    },
    body: JSON.stringify({
      message: 'Your function executed successfully!',
      input: event,
    }),
  };

  // success response
  callback(null, response);

};
yzuktlbb

yzuktlbb3#

如果您完成了API网关设置修改过程的大部分内容,但没有单击Deploy,也可能发生此问题。直到我们单击Deploy,我们才得到填充了事件信息的测试请求,而真实的的HTTPS连接创建了空事件({})。

uxhixvfz

uxhixvfz4#

也可以进入API网关〉resources〉{要使用的方法查询字符串参数}〉方法请求〉查询字符串参数。
并在那里定义参数。这使您可以控制是否需要这些参数。
然后在你的lambda函数中,它也会在一个'queryStringParameters'对象中。
因此,不是event['val1'],而是event['queryStringParameters']['val1']
也许这对AWS lambda/API网关设置来说是新的。但我认为这是一种稍微更直观的方法,因为您正在定义参数,而不是接受任何东西,并且必须在lambda函数中猜测用户正在发送什么。

uajslkp6

uajslkp65#

在我的例子中,我在lambda函数中输入了console log,但忘记了部署它。

相关问题