我希望有人可以帮我从Lambda中的AWS API网关获取传递的URL参数。
我有点困惑如何在Lambda代码中访问它。
对于API网关,我已按照以下步骤操作:
1)去资源 - >整合请求
2)点击模板下拉列表旁边的加号图标
3)在内容类型字段中明确键入 application / json
4)输入映射已输入:
{ "apiToken": "$input.params('apiToken')" }
因此,为了澄清,如何在Lambda函数中访问参数 apiToken ?
我一直在看演练和其他文档一段时间,我的大脑有点疲惫不堪。
感谢所有帮助和反馈:)
所以,问题似乎是AWS网站AJAX保存没有保存我在映射中输入的内容(我在酒店wifi上也可以这样)。
现在,当我测试它时,我得到:
Received event: { appToken: '123456' }
在lambda的控制台日志中。但是,当我转到API网关时,部署响应是:
" errorMessage":"在完成请求之前退出流程"
任何想法?
P.S该功能在Lambda控制台中有效,但是当我使用Postman [POST + Param]进行测试时,它不起作用,上面提供了错误消息
这是我的整个Lambda函数
console.log('Loading event');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
var http = require('http');
exports.handler = function(event, context) {
var tableName = "clients";
var appToken = event.params.appToken; //gr5f4sgnca25hki98
dynamodb.getItem({
TableName: tableName,
Key: {
ClientID: { S: appToken } }
}, function (err, data)
{
if (err) {
context.done(err);
} else {
var url = data.Item.url.S + data.Item.api.S;
console.log(url);
console.log('Received event:', event.params.appToken);
http.get(url, function(res) {
// Continuously update stream with data
var body = '';
res.on('data', function(d) {
body += d;
});
res.on('end', function() {
var result = body.replace('\\', '');
context.succeed(JSON.parse(result));
});
res.on('error', function(e) {
context.fail("Got error: " + e.message);
});
});
}
});
};
在我的测试活动中,我有:
{
"method": "POST",
"params": {
"appToken": "gr5f4sgnca25hki98"
}
}
当我在Lambda中运行它时,respnse工作,它连接外部JSON文件并返回它。
然而,在邮递员中我收到错误:
" errorMessage":"在完成请求之前退出流程"
任何人都可以在控制台中看到为什么一切正常,当我在部署中尝试时,我仍然会收到错误?
当我打开XCODE并使用Alamofire测试此网址时,我收到此错误(如果有帮助)
字符72周围的无效序列
从API控制台测试时,使用:
{
"method": "POST",
"params": {
"appToken": "gr5f4sgnca25hki98"
}
}
请求正文中的。我明白了:
请求:/ sendtoclient
状态:200
延迟:1839毫秒
{" errorMessage":"在完成请求之前退出流程" }
{"内容类型":"应用/ JSON"}
Execution log for request test-request
Tue Mar 22 17:28:27 UTC 2016 : Starting execution for request: test-invoke-request
Tue Mar 22 17:28:27 UTC 2016 : HTTP Method: POST, Resource Path: /sendtoclient
Tue Mar 22 17:28:27 UTC 2016 : Method request path: {}
Tue Mar 22 17:28:27 UTC 2016 : Method request query string: {}
Tue Mar 22 17:28:27 UTC 2016 : Method request headers: {}
Tue Mar 22 17:28:27 UTC 2016 : Method request body before transformations: {
"method": "POST",
"params": {
"appToken": "gr5f4sgnca25hki98"
}
}
Tue Mar 22 17:28:27 UTC 2016 : Endpoint request body after transformations: { "appToken": "" }
Tue Mar 22 17:28:29 UTC 2016 : Endpoint response body before transformations: {"errorMessage":"Process exited before completing request"}
Tue Mar 22 17:28:29 UTC 2016 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=123456789, Connection=keep-alive, Content-Length=59, X-Amz-Function-Error=Unhandled, Date=Tue, 22 Mar 2016 17:28:29 GMT, Content-Type=application/json}
Tue Mar 22 17:28:29 UTC 2016 : Method response body after transformations: {"errorMessage":"Process exited before completing request"}
Tue Mar 22 17:28:29 UTC 2016 : Method response headers: {Content-Type=application/json}
Tue Mar 22 17:28:29 UTC 2016 : Successfully completed execution
Tue Mar 22 17:28:29 UTC 2016 : Method completed with status: 200
我不确定如何破译这个。任何帮助将非常感谢。然而我注意到了这一点:
Endpoint request body after transformations: { "appToken": "" }
由于某些原因,我觉得可能很重要
答案 0 :(得分:0)
你应该使用' event.apiToken'在你的功能基础上你给我们的映射。 {apiToken}在您的资源名称中吗?