读取事件参数AWS lambda

问题描述 投票:1回答:1

我有一个lambda函数(Node.js 4.3)如下:

exports.handler = function(event, context, callback) {
    console.log('Received event:', JSON.stringify(event, null, 2));
    var greeter = 'World';
    if (event.greeter && event.greeter!=="" && event.greeter1 && event.greeter1!=="") {
        console.log('Received 1');
        greeter =  event.greeter + event.greeter1 ;
    } else if (event.body && event.body !== "") {
         console.log('Received Body');
        var body = JSON.parse(event.body);
        if (body.greeter && body.greeter !== "") {
            greeter = body.greeter;
        }
    } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") {
        greeter = event.queryStringParameters.greeter;
    } else if (event.headers && event.headers.greeter && event.headers.greeter != "") {
        greeter = event.headers.greeter;
    }
    res.body = "Hello, " + greeter + "!";
    callback(null, res);
};

当我使用测试控制台测试函数时它工作正常,它给我一个正确的输出如下:

Response:
{
  "statusCode": 200,
  "headers": {
    "Content-Type": "*/*"
  },
  "body": "Hello, maximJane!"
}

但是,当我尝试使用我的API网关(API网关中的AWS Lambda代理集成)测试它时,它只是认为一个争论基本上是“欢迎”。 'greeter1'根本没有考虑过。

我尝试了所有选项,但不知何故它只读了1个参数。

aws-lambda aws-api-gateway
1个回答
1
投票

AWS Lambda代表您自动监控Lambda功能,通过Amazon CloudWatch报告指标。您可以检查它(转到监视lambda函数上的Tab,然后单击'在CloudWatch上查看')。您将看到该事件仅具有'greeter'参数(console.log('Received event:', JSON.stringify(event, null, 2));也会打印到日志中)。

之所以发生这种情况,是因为您尚未映射Gateway API上的每个参数。您可以在方法属性的“集成请求”/“映射模板”中执行此操作。

enter image description here

查看如何在API Gateway Mapping Template Reference文章中的“访问$ input Variable”部分中映射它。

enter image description here

你的模板应该是下一个例子:

{
    "greeter": "$input.params('greeter')",
    "greeter1": "$input.params('greeter1')",
    "Data": $input.json('$')
}
  • $ input.params - 来自param的地图数据
  • $ input.json('$') - 来自请求体的数据(如果是postput
© www.soinside.com 2019 - 2024. All rights reserved.