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

How to send http request with nodejs AWS Lambda?

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

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

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 请求均未执行。只记录'start'和'end'console.logs,函数内部的不记录。

这是异步问题吗?谢谢

您需要确保正在触发处理程序。有两种方法可以实现:

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

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

为了成功完成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'。 希望这对其他新手有所帮助!