我有一个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个参数。
答案 0 :(得分:1)
AWS Lambda代表您自动监视Lambda功能,并通过Amazon CloudWatch报告指标。您可以检查它(转到lambda功能的“监视”选项卡,然后单击“在CloudWatch上查看”)。您将看到该事件仅具有“ greeter”参数(也将打印console.log('Received event:', JSON.stringify(event, null, 2));
以记录日志)。
发生这种情况是因为您尚未在Gateway API上映射每个参数。您可以在方法属性的“集成请求” /“映射模板”中完成此操作。
在API Gateway Mapping Template Reference文章的“访问$ input变量”部分中查看如何映射它。
您的模板应类似于下一个示例:
{
"greeter": "$input.params('greeter')",
"greeter1": "$input.params('greeter1')",
"Data": $input.json('$')
}
post
或put
)