如何在 AWS API 网关中传递查询字符串参数?
How to pass the query string parameters in the AWS API Gateway?
以下是我的 Lambda 处理程序,它需要来自 queryStringParameters 的 users 数据:-
export const lambdaHandler = async (event, context) => {
try {
const numberOfUsersRequested= (event && event.queryStringParameters.users) ? event.queryStringParameters.users : 10;
const users = await generateUsers(numberOfUsersRequested).then(data => data.users);
我正在使用 AWS SAM 开发我的 Lambda,我可以在本地使用 event.json 作为此 Lambda 的输入事件来很好地测试它。这是 event.json 的一大块,我在其中传递 queryStringParamters 用户,如下所示:-
{
"body": "{\"message\": \"mock data\"}",
"resource": "/{proxy+}",
"path": "/path/to/resource",
"httpMethod": "POST",
"isBase64Encoded": false,
"queryStringParameters": {
"users": 200
},
现在,我可以知道如何从 AWS API 网关控制台传递相同的 QueryStringParameters 吗?目前,我在 API 网关的 AWS 控制台上收到此 500 错误:-
{
"message": "Internal server error"
}
Mon Sep 28 01:24:15 UTC 2020 : Endpoint response headers: {Date=Mon, 28 Sep 2020 01:24:15 GMT, Content-Type=application/json, Content-Length=2, Connection=keep-alive, x-amzn-RequestId=0e1f110c-e80c-4ff1-870a-5cafd04167db, x-amzn-Remapped-Content-Length=0, X-Amz-Executed-Version=$LATEST, X-Amzn-Trace-Id=root=1-5f713b3d-4762f9b07ee8c1d7c6623574;sampled=0}
Mon Sep 28 01:24:15 UTC 2020 : Endpoint response body before transformations: {}
Mon Sep 28 01:24:15 UTC 2020 : Execution failed due to configuration error: Output mapping refers to an invalid method response: 200
Mon Sep 28 01:24:15 UTC 2020 : Method completed with status: 500
我已经执行了以下步骤来缓解问题,但没有奏效。好像少了什么 :-
1)在方法请求中添加了 url 查询字符串参数作为用户(参考截图)
在集成请求 -> 映射模板中,将映射添加为 application/json:-
{
“用户”:“$input.params('users')”
}
- 最后将查询字符串作为 users=6 传递。
在您的情况下,event
应该只是:
{
"users": "6"
}
您可以将以下内容添加到处理程序的开头以确认:
console.log(JSON.stringify(event, null, 2));
因此,要获得 users
值,您应该只使用 event.users
,而不是 event.queryStringParameters.users
。
以下是我的 Lambda 处理程序,它需要来自 queryStringParameters 的 users 数据:-
export const lambdaHandler = async (event, context) => {
try {
const numberOfUsersRequested= (event && event.queryStringParameters.users) ? event.queryStringParameters.users : 10;
const users = await generateUsers(numberOfUsersRequested).then(data => data.users);
我正在使用 AWS SAM 开发我的 Lambda,我可以在本地使用 event.json 作为此 Lambda 的输入事件来很好地测试它。这是 event.json 的一大块,我在其中传递 queryStringParamters 用户,如下所示:-
{
"body": "{\"message\": \"mock data\"}",
"resource": "/{proxy+}",
"path": "/path/to/resource",
"httpMethod": "POST",
"isBase64Encoded": false,
"queryStringParameters": {
"users": 200
},
现在,我可以知道如何从 AWS API 网关控制台传递相同的 QueryStringParameters 吗?目前,我在 API 网关的 AWS 控制台上收到此 500 错误:-
{
"message": "Internal server error"
}
Mon Sep 28 01:24:15 UTC 2020 : Endpoint response headers: {Date=Mon, 28 Sep 2020 01:24:15 GMT, Content-Type=application/json, Content-Length=2, Connection=keep-alive, x-amzn-RequestId=0e1f110c-e80c-4ff1-870a-5cafd04167db, x-amzn-Remapped-Content-Length=0, X-Amz-Executed-Version=$LATEST, X-Amzn-Trace-Id=root=1-5f713b3d-4762f9b07ee8c1d7c6623574;sampled=0}
Mon Sep 28 01:24:15 UTC 2020 : Endpoint response body before transformations: {}
Mon Sep 28 01:24:15 UTC 2020 : Execution failed due to configuration error: Output mapping refers to an invalid method response: 200
Mon Sep 28 01:24:15 UTC 2020 : Method completed with status: 500
我已经执行了以下步骤来缓解问题,但没有奏效。好像少了什么 :- 1)在方法请求中添加了 url 查询字符串参数作为用户(参考截图)
在集成请求 -> 映射模板中,将映射添加为 application/json:-
{ “用户”:“$input.params('users')” }
- 最后将查询字符串作为 users=6 传递。
在您的情况下,event
应该只是:
{
"users": "6"
}
您可以将以下内容添加到处理程序的开头以确认:
console.log(JSON.stringify(event, null, 2));
因此,要获得 users
值,您应该只使用 event.users
,而不是 event.queryStringParameters.users
。