【问题标题】:How do you pass query string parameters to the AWS API Gateway client with the Javascript SDK?如何使用 Javascript SDK 将查询字符串参数传递给 AWS API Gateway 客户端?
【发布时间】:2019-09-03 18:54:35
【问题描述】:

我在 AWS API Gateway 中定义了一个使用 Lambda 集成的端点。 Lambda 函数需要在传递给它的 event 对象中可用的查询字符串参数。

我的 API 位于 example.execute-api.us-east-1.amazonaws.com/dev/my-resource,并且我有查询字符串参数,例如 foo=test

所以完整的端点是

example.execute-api.us-east-1.amazonaws.com/dev/my-resource?foo=test

我可以在浏览器中访问此端点或在邮递员中请求它,并获得预期的响应,因此我知道 API 网关配置正确。但是,当我使用 Javascript SDK 时,我似乎无法传递查询字符串参数。

根据this page from the docs 的最后一部分,我应该能够只传递一个 JSON 对象,该对象将被解释为查询字符串参数,如下所示:

var apiClient = apigClientFactory.newClient();
var requestParams = {"foo": "test"};
apiClient.myResourceGet(requestParams).then(function(result) {
    // Do something with the response
});

但是,就我而言,requestParams 似乎被忽略了。在 Lambda 函数中,event 有一个空的 queryStringParameters 字段。 如何将requestParams 对象中定义的键/值作为查询字符串参数传递给此端点?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway


    【解决方案1】:

    由于您的以下端点传递了查询参数,因此您真的不需要 json 对象

    example.execute-api.us-east-1.amazonaws.com/dev/my-resource?foo=test
    

    创建变量

    var test = <assign value>
    

    现在

    var params = {
                            host: "execute-api.us-east-1.amazonaws.com",
                            path: "/dev/my-resource?foo="+test
    
                            };
    

    例子:

    var https = require('https');
           exports.handler = (event, context, callback) => {
           var params = {
                        host: "bittrex.com",
                        path: "/api/v1.1/public/getmarketsummaries"
    
                        };
    
      var req = https.request(params, function(res) {
        let data = '';
        console.log('STATUS: ' + res.statusCode);
        res.setEncoding('utf8');
        res.on('data', function(chunk) {
            data += chunk;
        });
        res.on('end', function() {
            console.log("DONE");
            console.log(JSON.parse(data));
        });
      });
       req.end();
     };
    

    【讨论】:

    • 谢谢,但这并不能真正回答有关 AWS 开发工具包的问题。这个 GET 端点是众多端点之一(使用各种 HTTP 方法),当 AWS 开发工具包已经适用于 POST 请求时,我不想使用另一个库来执行 GET 请求。
    • Node js 不是库,使用节点调用 rest 任何 http 方法,如 get ,post,put 等。
    • 您正在使用http 模块,这就是我所指的库。此外,这是一个客户端(基于浏览器)应用程序,使用 vanilla Javascript。
    猜你喜欢
    • 2016-11-18
    • 2016-05-28
    • 2021-01-13
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多