首页 文章

从Lambda中的API网关获取URL参数

提问于
浏览
0

我希望有人可以帮我从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 回答

  • 0

    你应该根据你给我们的映射在你的函数中使用'event.apiToken' . 在您的资源名称中吗?

相关问题