Извините, у меня пока недостаточно комментариев для комментирования, поэтому необходимо отправить это как ответ.
Появляется новое поле лямбда-события "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),
};
}