Определить параметр типа списка API GATEWAY - PullRequest
0 голосов
/ 07 сентября 2018

Согласно документам aws можно передать параметр запроса с типом списка в формате foo=1,2,3

Но когда я делаю это таким образом, я получаю stringвместо array в лямбде event.queryStringParameters.foo === '1,2,3'

Я что-то упустил или aws не поддерживает это?

Ответы [ 2 ]

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

Извините, у меня пока недостаточно комментариев для комментирования, поэтому необходимо отправить это как ответ.

Появляется новое поле лямбда-события "multiValueQueryStringParameters".

Например, следующий URL будет генерировать это событие в AWS Lambda:

https://example.uk/API/search?excludeLabels=sstc&excludeLabels=empty&excludeLabels=removed&limit=500

{
  "resource": "/{proxy+}",
  "path": "/API/search",
  "httpMethod": "GET",
  "headers": {},
  "multiValueHeaders": {},
  "queryStringParameters": {
      "excludeLabels": "removed",
      "limit": "500"
  },
  "multiValueQueryStringParameters": {
      "excludeLabels": [
          "sstc",
          "empty",
          "removed"
      ],
      "limit": [
          "500"
      ]
  },
  "pathParameters": {
      "proxy": "search"
  },
  "stageVariables": {},
  "requestContext": {},
  "body": null,
  "isBase64Encoded": false
}

Обратите внимание, что поле queryStringParameters содержит только последнее значение.

Вы можете довольно легко справиться с обоими с помощью библиотеки urijs:

module.exports.handler = async (event, context) => {
  const { path, queryStringParameters, multiValueQueryStringParameters } = event;

  const uriPath = new URI(path);
  if (queryStringParameters) {
    uriPath.query(queryStringParameters);
  }

  if (multiValueQueryStringParameters) {
    uriPath.query(multiValueQueryStringParameters);
  }
  
  // -- snip bootstrap of HAPI server --
  
  // map lambda event to hapi request
  const options = {
    credentials: event.requestContext.authorizer,
    headers,
    method: event.httpMethod,
    payload: event.body,
    url: uriPath.toString(),
    validate: false,
  };

  const res = await hapiServer.inject(options);

  return {
    statusCode: res.statusCode,
    headers: res.headers,
    body:
      typeof res.result === 'string' ? res.result : JSON.stringify(res.result),
  };
}
0 голосов
/ 07 сентября 2018

После некоторой регистрации кажется, что API GATEWAY анализирует те же ключи запроса, что и список в event.multiValueQueryStringParameters

Итак, если вы сделаете запрос

GET https://execute-api.eu-central-1.amazonaws.com/stage/foo?bar=1&bar=2&bar=3

Он появится в event.multiValueQueryStringParameters в виде массива

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