AWS-如何获取Lambda-节点-将查询参数用作事件属性

时间:2019-12-02 21:54:57

标签: javascript amazon-web-services aws-lambda aws-api-gateway

我的lambda可以正常工作,并且测试事件为{"zipcode": "02149"}

输出为

{
  "statusCode": 200,
  "body": "Hello from Lambda to zip code 02149"
}

lambda称为Zipinfo

exports.handler = async (event, context) => {
    const response = {
        statusCode: 200,
        body: 'Hello from Lambda to zip code '+ event.zipcode
    };
    return response;
};

如何获取lambda以使用查询参数“邮政编码”,然后在输出中显示该参数?我向集成请求和响应中添加了映射模板,但无法使它们显示值,我想念的是什么?被称为事件吗?映射正确吗? URL查询字符串是否需要/正确?

集成请求

enter image description here

集成响应

enter image description here


enter image description here

2 个答案:

答案 0 :(得分:0)

我认为您缺少的是查询字符串参数将位于其自己的键下。 因此,您应该以{{1​​}}的身份访问它。 您可以在此处查看示例Amazon API Gateway消息事件:https://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https.html

答案 1 :(得分:0)

在您的源代码中,我看到您实现了以下格式

exports.handler = async (event, context) => {
    const response = {
        statusCode: 200,
        body: 'Hello from Lambda to zip code '+ event.zipcode
    };
    return response;
};

我认为您已经在API网关的集成请求中标记了使用Lambda代理集成 如果是这样,您将有两种方法(我认为是这样)从API网关获取查询字符串数据

对于请求GET /zip/info?zipcode=101。用于代理集成的Lambda函数的输入格式如下:(doc

{
    "resource": "Resource path",
    "path": "Path parameter",
    "httpMethod": "Incoming request's method name"
    "headers": {String containing incoming request headers}
    "multiValueHeaders": {List of strings containing incoming request headers}
    "queryStringParameters": {query string parameters }
    "multiValueQueryStringParameters": {List of query string parameters}
    "pathParameters":  {path parameters}
    "stageVariables": {Applicable stage variables}
    "requestContext": {Request context, including authorizer-returned key-value pairs}
    "body": "A JSON string of the request payload."
    "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"
}

您的zipcode将存储在queryStringParameters中, 那么第一个选项是:

  • 映射模板:
"zipCodeFromHttpRequest": "$input.params().querystring.get('zipCode')"

如果您需要保留两种方式来执行lambda函数(直接通过输入和API网关集成进行执行),则必须检查源代码中的event对象,以检测在哪里可以获取邮政编码( zipcodezipCodeFromHttpRequest)。

  • Proxy Integration的事件对象: 您可以从源代码中获取queryStringParameters对象,例如
const zipcode = event.zipcode || event['queryStringParameters']['zipcode'];