如何使用nodejs AWS Lambda发送http请求?

时间:2015-11-01 00:27:36

标签: node.js http amazon-web-services aws-lambda

我使用AWS Lambda来推动Alexa Skill Kit开发。在尝试跟踪事件时,我希望脚本在启动时发送HTTP请求,但是从云日志中看起来好像在执行过程中跳过了http.get函数。

代码如下所示(google.com取代了分析跟踪网址 - 已在浏览器中测试过);

 
exports.handler = function (event, context) {

    var skill = new WiseGuySkill();
    var http = require('http');

    var url = 'http://www.google.com';
    console.log('start request to ' + url)
    http.get(url, function(res) {
        console.log("Got response: " + res.statusCode);
        // context.succeed();
    }).on('error', function(e) {
        console.log("Got error: " + e.message);
        // context.done(null, 'FAILURE');
    });
    console.log('end request to ' + url);

    skill.execute(event, context);
};

上下文对象已被注释掉以允许' skill.execute'功能,但这种HTTP请求的任何一种方式都没有执行。只有'开始'并且'结束'记录console.logs,函数内部不记录。

这是一个异步问题吗?感谢。

2 个答案:

答案 0 :(得分:1)

您需要确保触发处理程序。有两种方法可以实现这一目标:

  • 您可以设置新的API端点并对其执行请求。
  • 您可以点击“测试”按钮,然后使用给定数据调用您的函数。

我复制并粘贴了整个代码段,但第一行和最后一行除外(因为我没有在任何地方定义customSkill)。我能够获得200响应代码。

答案 1 :(得分:1)

为了成功完成http请求,必须将http.get函数合并到回调函数中。否则,该过程将无法完成并将提前结束,使用回调允许http请求完成(有或没有错误),然后继续执行其余功能。

WiseGuySkill.prototype.eventHandlers.onLaunch = function (launchRequest, session, response) {

    // Call requestFunction to make the http.get call.
    // Get response from requestFunction using requestCallback
    requestFunction(function requestCallback(err) {

        // If error occurs during http.get request - respond with console.log
        if (err) {
            console.log('HTTP Error: request not sent');
        }

        ContinueIntent(session,response);
    });
};

功能' requestFunction'调用http.get并触发回调。

function requestFunction(requestCallback){

        var url = "http://www.google.com";

        http.get(url, function(res) {
            console.log("Got response: " + res.statusCode);
            requestCallback(null);
        }).on('error', function (e) {
            console.log("Got error: ", e);
        });
    }

显然确保您需要' http'在脚本的开头。 希望这可以帮助其他任何新手!