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

时间:2019-04-25 17:34:53

标签: node.js amazon-web-services api aws-lambda aws-api-gateway

我正在使用Lambda函数查询RDS MySQL数据库。为了获取一行,我将主键作为参数传递给URL(使用AWS API Gateway)。示例网址为:

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代理集成。

3 个答案:

答案 0 :(得分:0)

应该在API网关上启用Lambda代理集成,以便API Gateway将事件详细信息(包括参数)传递给Lambda。

有关在控制台中如何执行此操作的信息,请参见此处:

enter image description here

转到您的API,然后转到“资源”,再转到“方法执行”,然后选择“集成请求”。从那里打勾,写上“使用Lambda代理集成”的框。

启用此功能后,API网关会将事件中可用的请求详细信息(包括参数)代理到Lambda。

答案 1 :(得分:0)

请确保选中“使用Lambda代理集成”复选框,该复选框将在API网关的方法和关联的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);

};

答案 2 :(得分:0)

如果您完成了大部分 API Gateway 设置修改过程,但没有点击部署,也会出现此问题。在我们点击 Deploy 之前,我们收到了填充有事件信息的测试请求,而真正的 HTTPS 连接创建了空事件 ({})。