我希望有人可以帮我从Lambda中的AWS API网关获取传递的URL参数 .
我有点困惑如何在Lambda代码中访问它 .
对于API网关,我遵循以下步骤:
1)去 Resources -> Integration Request
2)单击模板下拉列表旁边的加号图标
3)在content-type字段中显式键入 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]测试它时,它不起作用,上面提供的错误消息
更新2
这是我的整个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文件并返回它 .
但是,在Postman我收到错误:
“errorMessage”:“在完成请求之前退出流程”
任何人都可以在控制台中看到为什么它一切正常,当我在部署中尝试时,我仍然得到错误?
当我打开XCODE并使用Alamofire测试此URL时,我收到此错误(如果有帮助)
字符72周围的无效序列
更新3(从API控制台测试)
从API控制台进行测试时,使用:
{
"method": "POST",
"params": {
"appToken": "gr5f4sgnca25hki98"
}
}
在请求正文中 . 我明白了:
请求:/ sendtoclient状态:200延迟:1839毫秒
响应机构
{“errorMessage”:“在完成请求之前退出流程”}
响应 Headers
{“Content-Type”:“application / 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": "" }
由于某些原因,我觉得可能很重要
1 回答
你应该根据你给我们的映射在你的函数中使用'event.apiToken' . 在您的资源名称中吗?