首页 > 解决方案 > aws api 网关和 lamda - 如何获取 event.body

问题描述

我是 aws 新手,在我的 lamda 处理程序函数中获取事件主体时遇到了一个奇怪的问题。

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: event.body
    };
    return response;
};

在此处输入图像描述

当我运行测试时,我得到

Response:
{
  "statusCode": 200
}

但是,当我只返回事件时

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: event <=====
    };
    return response;
};

我明白了

Response:
{
  "statusCode": 200,
  "body": {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
  }
}

我正在使用节点 8.10。有人知道我在这里做错了什么吗?

标签: amazon-web-servicesaws-lambdaaws-api-gateway

解决方案


Lambda 控制台中的测试事件正是您event在 Lambda 处理程序中作为参数获得的内容。当你投入时{"a":1},你得到{"a":1}

您可以从组合框中选择模板来模拟不同事件类型的 AWS 服务(SNS、S3、API 网关)。

当您返回 HTTP 响应时,您可能希望模拟 API Gateway 事件,它可能如下所示:

{
  "body": "{\"a\":1}",
  "pathParameters": {
    "id": "XXX"
  },
  "resource": "/myres",
  "path": "/myres",
  "httpMethod": "GET",
  "isBase64Encoded": true,
  "requestContext": {
    "authorizer": {
      "tenantId": "TEST"
    },
    "accountId": "123456789012",
    "resourceId": "123456",
    "stage": "test",
    "requestId": "test-request-id",
    "requestTime": "09/Apr/2015:12:34:56 +0000",
    "requestTimeEpoch": 1428582896000,
    "path": "/myres",
    "resourcePath": "/myres,
    "httpMethod": "GET",
    "apiId": "1234567890",
    "protocol": "HTTP/1.1"
  }
}

然后您将获取正文event.body作为 JSON 字符串 - 您可以将其转换为对象JSON.parse(event.body)

返回时,您必须使用以下命令序列化响应正文JSON.stringify

return {
    statusCode: 200,
    body: JSON.stingify({your:'object'})
};

推荐阅读