Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传递aws lambda函数的查询参数_Javascript_Aws Lambda_Aws Api Gateway - Fatal编程技术网

Javascript 传递aws lambda函数的查询参数

Javascript 传递aws lambda函数的查询参数,javascript,aws-lambda,aws-api-gateway,Javascript,Aws Lambda,Aws Api Gateway,我正在尝试设置一个Lambda函数,该函数将提取传递到创建的API网关URL中的查询参数。(侧边栏:在编程方面,我还是个新手,所以请原谅我在如何命名方面的任何无意混淆)。我使用Synchronize.JS在光纤中封装了一些REST调用,当我硬编码要传递到各种REST URL的变量时,效果非常好,但我们的目标是能够传递不同的参数,这些参数将作为进行的不同REST调用的全局变量。这就是我现在拥有的 // Dependendies var request = require('superagent')

我正在尝试设置一个Lambda函数,该函数将提取传递到创建的API网关URL中的查询参数。(侧边栏:在编程方面,我还是个新手,所以请原谅我在如何命名方面的任何无意混淆)。我使用Synchronize.JS在光纤中封装了一些REST调用,当我硬编码要传递到各种REST URL的变量时,效果非常好,但我们的目标是能够传递不同的参数,这些参数将作为进行的不同REST调用的全局变量。这就是我现在拥有的

// Dependendies
var request = require('superagent');
var sync = require('synchronize');


exports.handler = function(event, context) {

    sync.fiber(function() {
        var followingArray = [];
        var followersArray = [];
        var postsCountArray = [];
        var allSqorCountArray = [];
        var trendingPostAuthorArray = [];
        var hashtagCountArray = [];
        var notificationCountArray = [];

        var getParam = function(query){
                var SearchString = window.location.search.substring(1);
                var VariableArray = SearchString.split('&');
                for(var i = 0; i < VariableArray.length; i++){
                var KeyValuePair = VariableArray[i].split('=');
                if(KeyValuePair[0] == query){
                    return KeyValuePair[1];
                }
                };
        };

        var userId = getParam('userId');
        var limit = getParam('limit');
        var offset = getParam('offset');

        var restCallOne = function() {
            request('https://someurl.com/etc/' + userId + '/follows?limit=' + limit + '&offset=' + offset)
            .end(function(err, res) {
                if (err) {
                    console.log('Request 1');
                    context.fail("Danger Will Robinson!!! Follows Count Does Not Like You!!");
                } else {
                    var followsCount = res.body.total_count;
                    followingArray.push(followsCount);
                }
            });
        };

        var restCallTwo = function() {
            request
            .get('https://someurl.com/etc/etc/etc?limit=' + limit + '&offset=' + offset)
            .set({'access-token': 'someAccessToken'})
            .end(function(err, res) {
                if(err) {
                    console.log('Request 4');
                    context.fail("Danger Will Robinson!!  The All Sqor Feed is moody");
                } else {
                    var allSqorCount = res.body.total_count;
                    allSqorCountArray.push(allSqorCount);
                }
            });
        };

        var restCallThree = function() {
            request
            .get('https://someUrl.com/etc/' + userId + '/followers?limit=' + limit + '&offset=' + offset)
            .end(function(err, res) {
                if (err) {
                    console.log('Request 3');
                    context.fail("Danger Will Robinson!!! Following Count Done Smacked You Upside The Head!!");
                } else {
                    var count = res.body.total_count;
                    followersArray.push(count);
                    context.done(null, 'The total number of people that follow Andy is ' + followersArray[0] +
                                       ', and the number of people that Andy follows is ' + followingArray[0] + 
                                       ', and the number of posts in his feed is ' + allSqorCountArray[0]);
                }
            });
        };

        try {
            restCallOne(userId, limit, offset);
        } catch(errOne) {
            console.log("Error on call 1!!");
        }

        try {
            restCallTwo(limit, offset);
        } catch(errTwo) {
            console.log("Error on call 2!!");
        }

        try {
            restCallThree(userId, limit, offset);
        } catch(errThree) {
            console.log("Error on call 3!!");
        }
    });
};
//从属关系
var请求=要求(“超级代理”);
var sync=require('synchronize');
exports.handler=函数(事件、上下文){
sync.fiber(函数(){
var数组=[];
var FollowerArray=[];
var postsCountArray=[];
var allSqorCountArray=[];
var trendingPostAuthorArray=[];
var hashtagCountArray=[];
var notificationCountArray=[];
var getParam=函数(查询){
var SearchString=window.location.search.substring(1);
var VariableArray=SearchString.split('&');
对于(变量i=0;i
当我将其与此函数链接时生成的API网关URL如下所示:

但我希望能够传入类似的内容,并使用Lambda函数中的params从rest调用返回正确的信息:

这可能吗??我是否偏离了这一点?

您需要在API中设置网关。如果您提前知道参数的名称,则模板可能如下所示:

{
  "userId": "$input.params('userId')",
  "limit": "$input.params('limit')",
  "offset": "$input.params('offset')"
}
{
  "querystring": "$input.params().querystring"
}
其中,将对每个
$input.params(“…”)
进行求值,并在将事件传递给Lambda时将查询字符串中的值放在其位置

如果您事先不知道参数名,则必须在Lambda中进行一些解析。您的映射模板如下所示:

{
  "userId": "$input.params('userId')",
  "limit": "$input.params('limit')",
  "offset": "$input.params('offset')"
}
{
  "querystring": "$input.params().querystring"
}
在传递给Lambda的事件中,其结果如下所示:

{
  "querystring": "{limit=25, offset=0, userId=212733}"
}

然后在
getParam()
中解析
event.querystring
而不是
window.location.search
。显然,您需要更改一些逻辑,因为您将在逗号上而不是在符号上拆分,并且您需要去掉花括号。顺便说一句,因为此时您在服务器上,所以没有
窗口
对象。

Ryan,非常感谢。我的一位同事能够用你今天早些时候指出的完全相同的方法帮助我解决这个问题,但我非常感谢你提交这份回复,因为它非常清楚地说明了步骤。没问题。你介意接受这个答案吗?谢谢当然可以为延迟这样做道歉。再次感谢!