Как узнать, что в лямбде, когда использовать event и event.body - PullRequest
0 голосов
/ 27 октября 2019

Я новичок в написании лямбды с использованием nodejs. Мне нужно написать API, чтобы позволить пользователю войти в систему и отправить обратно токен доступа.

Итак, я изучаю другой пример и обнаружил, что иногда, когда я пишу пост-метод, можно получить доступ к телу (например, {'username':'***' , 'password' : '***'}), скажем,

exports.handler = async event => { console.log(event.body) }

, а иногда его можно вызвать только

exports.handler = async event => { console.log(event) }

Я пытался использовать почтальон, чтобы проверить разницу между их кодами и моим кодом. Даже если я скопирую пример, я могу получить доступ только к телу в event, но не event.body. Может кто-нибудь объяснить мне, почему есть такая разница?

Ответы [ 2 ]

1 голос
/ 27 октября 2019

Это одно из различий между лямбда-прокси-интеграцией и лямбда-непрокси-интеграцией .

С первым вы всегда получаете тело в виде строкив случае body.event.

В то время как с помощью интеграции без прокси вы можете указать, как запрос от клиента отображается на событие, используя Mapping Tempaltes .

0 голосов
/ 27 октября 2019

Лямбда сама по себе не знает и не ограничена в том, что будет содержать event - это полностью на усмотрение вызывающей стороны, которая вызвала функцию Lambda.

Когда сервисы AWS вызывают функции Lambda, они часто используютобщий стандартный формат, который включает в себя все в массиве event.Records (который, в некоторых случаях, например, уведомления о событиях S3 и триггеры Lambda @ Edge, всегда будет содержать ровно один элемент). Другие варианты использования включают совершенно другую структуру.

Что ожидать, определяется службой, поэтому вам нужно просмотреть документацию для службы, которая вызывает функцию лямбда-выражения. В целом служба должна быть согласованной, хотя могут существовать атрибуты, которые появляются или исчезают в зависимости от специфики триггера.

Использование AWS Lambda с другими службами в AWS LambdaРуководство разработчика обсуждает это более подробно и предоставляет ссылки на некоторую документацию по конкретным сервисам для некоторых сервисов AWS, которые взаимодействуют с Lambda.

И, конечно, функция Lambda не обязательно нуждается вбыть вызванным другой службой AWS вообще - вы можете вызвать функцию Lambda из своего собственного кода, или даже из другой функции Lambda (даже рекурсивно), или из консоли Lambda, и в этих случаях полезная нагрузка будет любой, какой выsend.


¹ без ограничений не совсем верно, поскольку Lambda API ожидает, что входная полезная нагрузка будет JSON, но это не имеет значения в обсуждаемом здесь смысле. ,Среда выполнения Node.js прозрачно десериализует JSON в event перед вызовом вашего обработчика. «event объект» (как его обычно называют) действительно является объектом. Точно, где / как / ли это ограничено (в отличие от, скажем, event, являющегося массивом или скаляром - с которым я никогда не сталкивался, но кажется возможным), также выходит за рамки предполагаемого выбора фразы «нет ограничений». "

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