根据aws docs,可以将列表类型的查询参数以格式foo=1,2,3
传递给
但是当我以这种方式进行操作时,我收到string
而不是array
的lambda event.queryStringParameters.foo === '1,2,3'
我是否缺少某些东西,或者aws不支持此功能?
答案 0 :(得分:1)
经过一些日志记录后,API GATEWAY解析了与event.multiValueQueryStringParameters
中的列表相同的查询键
因此,如果您提出请求
GET https://execute-api.eu-central-1.amazonaws.com/stage/foo?bar=1&bar=2&bar=3
它将作为数组出现在event.multiValueQueryStringParameters
中
答案 1 :(得分:0)
对不起,我没有足够的代表对此发表评论,因此必须将其提交为答案。
似乎有一个新的Lambda事件字段“ 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),
};
}