Как передать параметры на локальный сервер без вызова - PullRequest
0 голосов
/ 10 сентября 2018

Я работаю над проектом без сервера aws, и мне нужно локально протестировать лямбда-функции.
Я использую команду serverless invoke local -f {function_name} для проверки вызовов API, которые не запрашивают пути или параметров запроса.
У меня вопрос, как я могу использовать эту команду, чтобы передать любой путь или параметр запроса в функцию?

Пример описания без сервера

getFoodDetails:
    handler: handler.getFoodDetails
    events:
      - http:
          method: get
          path: /foods/{food_id}
          cors: true
          request:
            parameters:
              paths:
                food_id: true

Ответы [ 4 ]

0 голосов
/ 09 мая 2019

Я пробовал ответы с атрибутом --data, но ни не работает.
На самом деле проблема в том, что --data будет передавать строковое значение в платформу. Поэтому, если вы напишите в своем файле JavaScript: console.log(typeof(event));, вы получите String вместо Object. Это означает, что безсерверный фреймворк не преобразует входные данные в объект JSON правильно . Вот почему вы получили xx неопределенной ошибки.

Мое решение - использовать атрибут -p (или --path). В вашем примере выполните следующие действия:

  1. создайте файл .json в текущем местоположении вашей консоли. Например: test.json
  2. в файле json написать: {"pathParameters":{"food_id":"100"}}
  3. в файле js, чтобы получить food_id, используйте event.pathParameters.food_id
  4. команда запуска: sls invoke local -f yourFunction -p test.json
0 голосов
/ 12 октября 2018

Для дальнейшего использования. Ваше дело было бы решено так. Просто понял это благодаря JSON-примеру Kannaiyans.

sls invoke local -f getFoodDetails --data '{ "queryStringParameters": {"food_id":"123"}}'
0 голосов
/ 12 октября 2018

Строка данных

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

serverless invoke local -f {function_name} --data '{ "queryStringParameters": {"id":"P50WXIl6PUlonrSH"}}'

Файл данных

Что вы также можете сделать, это передать --path в файл json с данными в виде event и в «файле событий» определить нужные данные.

serverless invoke --function {function_name} --path event_mock.json

Вы можете каким-то образом вернуть событие из вызова и сохранить его в файле JSON или получить его из Amazon. Они предоставляют несколько примеров: https://docs.aws.amazon.com/lambda/latest/dg/eventsources.html

Имейте в виду, что если вы передадите оба --path и --data, данные, включенные в файл --path, будут перезаписаны данными, которые вы передали с флагом --data.

Документация: https://serverless.com/framework/docs/providers/aws/cli-reference/invoke#invoke-local

0 голосов
/ 10 сентября 2018

Используйте --data и передайте любой формат данных, который вы хотите отправить в локальную лямбду.

Пример строковых данных:

Безсерверный вызов --function functionName --stage dev --region us-east-1 --data "hello world"

Пример данных JSON:

Безсерверный вызов --function functionName --stage dev --region us-east-1 --data '{"property1": "value"}'

JSON Данные из файла:

Безсерверный вызов --function functionName --stage dev --region us-east-1 --path lib / data.json

Полная документация доступна здесь здесь

Надеюсь, это поможет.

...