构buildAlexa技能时,在lambda函数中使用NodeJS请求时,http响应或超时错误

我正在build立一个新的技能,我的lambda函数需要调用另一个API来获取一些歌曲的信息。 我的lambda函数被附加。

我的问题是,我可以通过Web浏览器打开url,并得到正确的响应,但是当我在AWS Lambda网站上testingPlay intent时,有时候我得到了超时,有时候我得到了200个代码,但是这样的代码不完整:{“r” :0,“is_show_quick_start”:0,“song”:[]},其中“song”应该有上下文。 (你可以看到它,如果你通过任何网页浏览器打开url)

此外,我testing了另一个url,也可以通过networking浏览器打开,但在AWS Lambda网站上testing时总是500。

我很新的NodeJS和build设Alexa技能。 任何人都可以请帮我弄清楚? 谢谢!

'use strict'; var Alexa = require('alexa-sdk'); var request = require('request'); var constants = require('./constants'); exports.handler = function(event, context, callback){ var alexa = Alexa.handler(event, context, callback); alexa.registerHandlers(stateHandlers.startModeIntentHandlers); alexa.execute(); }; var stateHandlers = { startModeIntentHandlers : Alexa.CreateStateHandler(constants.states.START_MODE, { "LaunchRequest": function () { this.emit(':ask', 'Welcome to Douban FM'); }, "Play": function() { request.get(url.playlistUrl, function (error, response, body) { console.log('error:', error); console.log('statusCode:', response && response.statusCode); console.log('body:', body); // var d = JSON.parse(data); // var result = d.song.get(0).url; // console.log('result url:', result); }); this.emit(':tell', "Ok."); } }) }; var url = { playlistUrl : 'https://douban.fm/j/mine/playlist?type=n&sid=966135&pt=206.8&channel=1&pb=64&from=mainsite&r=1d56c92354' }; 

请尝试使用“https”包来调用GET。 请看下面的示例,

 function findSongIfo(callBack) { var url = 'https://douban.fm/j/mine/playlist?type=n&sid=966135&pt=206.8&channel=1&pb=64&from=mainsite&r=1d56c92354'; var req = https.get(url, (res) => { var body = ""; res.on("data", (chunk) => { body += chunk }); res.on("end", () => { var result = JSON.parse(body); callBack(result) }); }).on("error", (error) => { callBack(err); }); } } 

我已经创build了GET调用作为一个单独的函数,在那里你可以传递callback。 您需要为“http'package”添加以下参考,

 var https = require('https');