Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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
Node.js 如何使用nodejs AWS Lambda发送http请求?_Node.js_Http_Amazon Web Services_Aws Lambda - Fatal编程技术网

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

Node.js 如何使用nodejs AWS Lambda发送http请求?,node.js,http,amazon-web-services,aws-lambda,Node.js,Http,Amazon Web Services,Aws Lambda,我正在使用AWS Lambda来驱动Alexa技能工具包的开发。为了跟踪事件,我希望脚本在启动时发送一个HTTP请求,但是从云日志来看,在执行过程中似乎跳过了HTTP.get函数 代码如下所示(google.com取代了分析跟踪url,该url已经在浏览器中测试过) exports.handler=函数(事件、上下文){ var skill=新的WiseGuySkill(); var http=require('http'); var url='1〕http://www.google.com';

我正在使用AWS Lambda来驱动Alexa技能工具包的开发。为了跟踪事件,我希望脚本在启动时发送一个HTTP请求,但是从云日志来看,在执行过程中似乎跳过了HTTP.get函数

代码如下所示(google.com取代了分析跟踪url,该url已经在浏览器中测试过)

exports.handler=函数(事件、上下文){
var skill=新的WiseGuySkill();
var http=require('http');
var url='1〕http://www.google.com';
log('start request to'+url)
get(url,函数(res){
日志(“得到响应:+res.statusCode”);
//context.success();
}).on('error',函数(e){
log(“获取错误:+e.message”);
//context.done(null,“FAILURE”);
});
log('end request to'+url);
执行(事件、背景);
};
上下文对象已被注释掉,以允许“skill.execute”发挥作用,但无论如何,此HTTP请求都不会执行。只记录“开始”和“结束”console.log,而不记录函数中的内部日志


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

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

  • 您可以设置一个新的API端点并在该端点上执行请求
  • 您可以点击Test按钮,然后使用给定的数据调用您的函数

除了第一行和最后一行之外,我复制并粘贴了您的整个代码片段(因为我在任何地方都没有定义
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”。
希望这有助于其他新手

我刚刚复制并粘贴了您的http请求代码,我得到了
启动请求http://www.google.com
结束对的请求http://www.google.com
,并且
在我的控制台中得到响应:200
。您确定正在调用此
处理程序
函数吗?感谢您的响应,这对我也很有用。然而,customSkill实际上是亚马逊提供的“wiseGuy”Alexa Skill工具包示例(在这里找到)(我编辑了这个问题以使其更清楚)。在exports处理程序中执行wiseguy时,就好像http.get响应被阻止并且永远不会发送一样。在wiseguy代码中,可能是什么原因造成的?@user2075625有趣。。您是否已在开发者门户中注册该技能?另外,您的服务器位于哪个区域?从Amazon的开发者页面:
Alexa skills的Lambda函数必须在美国东部(北弗吉尼亚)地区托管。目前,这是Alexa Skills Kit支持的唯一Lambda区域。
感谢您在这方面的帮助,我需要在http.get请求中进行回调,以确保请求完全实现。我在回答中显示了工作的重要性。谢谢你的时间@用户2075625没问题,如果对您有效,请确保将您的请求标记为答案。不过,我很好奇-为什么您需要用另一个回调将您的请求包装到另一个函数中?传递给
http.get
请求的函数已经是回调函数。