шлюз aws api и lamda - как получить event.body - PullRequest
0 голосов
/ 20 марта 2019

Я новичок в aws, и у меня странная проблема с получением тела события внутри моей функции-обработчика lamda.

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

enter image description here

Когда я запускаю тест, я получаю

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. Кто-нибудь знает, что я здесь делаю не так?

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Тестовое событие в консоли Lambda - это именно то, что вы получаете в качестве параметра event в вашем обработчике Lambda. Когда вы ставите {"a":1}, вы получаете {"a":1}.

Вы можете смоделировать различные типы событий службы AWS (SNS, S3, API Gateway), выбрав шаблон из выпадающего списка.

Когда вы возвращаете 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'})
};
0 голосов
/ 20 марта 2019

Изменение

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

до

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

Тело, которое вы возвращаете в API Gateway, должно быть строковым, иначе оно не знает, как обращаться с ответом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...