使用Superagent,AWS Lambda,API网关发出POST请求

时间:2015-12-10 19:42:53

标签: aws-lambda aws-api-gateway superagent

我正在使用AWS Lambda和API Gateway为负载测试创建自定义端点。我已经上传了我在文件中的处理函数,以及zip中函数所需的节点模块,并根据说明正确设置了API网关API(与我以前的工作方式一致) ,但我一直收到错误:{“error”:“Missing Authentication Token”}。到目前为止,我在网上看到的所有内容都指出我使用POST请求传递的url无效,但我已经使用GET请求创建了类似的端点。据我所知,我已经正确设置了POST请求(使用Superagent),并且传入了一个有效的访问令牌,以及作为URL一部分的硬编码参数(有效参数)。

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

exports.handler = function(event, context) {    

    sync.fiber(function() {

    // Grabs params passed into the URL as a JSON object
    var querystring = (event.querystring);

    // Replaces params with an updated version which includes a single quotation
    var queryStringUpdate = querystring.replace(/=/g, ":").replace(/}/g, "'}").replace(/:/g, ":'").replace(/,/g, "',");

    // Updates the param information and sets it as a new string
    eval('var queryString2 =' + queryStringUpdate);

    // Define specific query params to be used in the REST calls
    var userId = (queryString2.userId === undefined ? '229969' : queryString2.userId);
    var roomdId = (queryString2.roomId === undefined ? '4' : queryString2.roomId);
    var inviterId = (queryString2.inviterId === undefined ? '212733' : queryString2.inviterId);

    var createInvitePost = function() {
        request
        .post('https://some_url/v2/invites/212733/create')
        .set({'access-token': 'some_access_token'})
        .set('Content-Type', 'application/json')
        .query({user_id: "229969"})
        .query({room_jid: "4"})
        .end(function(err, res){
            if (err) {
                context.fail("Uh oh, something went wrong");
            } else {
                context.done(null, "Hurray, it worked!!");
            }
        });
    };

    try {
        createInvitePost();
    } catch(errOne) {
        alert("No bueno!!");
    }
});

};

对此有何看法?感谢

2 个答案:

答案 0 :(得分:0)

当我错过了API所需的部分网址时,我通常会收到此错误。在过去,它可能是阶段的名称,拼写错误的资源名称或缺少Path参数。

答案 1 :(得分:0)

我来自Api Gateway团队。

正如其他人所说,你得到403响应的最常见原因是错误的路径/方法。我对Superagent并不熟悉,但如果您在Postman和cURL中运行相同的请求,那么如果您使用了错误的路径/方法,我会感到惊讶。

如果可能的话,也许还要查看有线日志,以确保您的查询字符串逻辑在'?'之前没有附加正斜杠。

要检查的一些事项:

您是否部署了最近的API更改?

舞台' v2' (我假设这个阶段)指向一个已部署的API版本,该版本的POST邀请/ 212733 / create?

' access-token'应该对Api网关层没有影响。如果您尝试使用原生Api Gateway Api Key,则标题为' x-api-key'。

杰克