我正在学习Alexa Skill工具包并使用一个简单的技能来实现Alexa设备地址api。但是,当我在AWS平台上测试代码时,它返回" null"作为回应和我得到的日志:
{ Error: connect ECONNREFUSED 127.0.0.1:443
at Object.exports._errnoException (util.js:1018:11)
at exports._exceptionWithHostPort (util.js:1041:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14)
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 443 }
(不是日志中的所有信息,但我认为这是引起问题的部分)
这是我的代码:
function locationIntent(context,callback) {
var cardTitle = 'Location';
var deviceId = context.context.System.device.deviceId;
var accessToken = context.context.System.apiAccessToken;
var endpoint = context.context.System.apiEndpoint;
var url = endpoint+"/v1/devices/"+deviceId+"/settings/address";
var options = {
Host: "api.amazonalexa.com",
Endpoint:"/v1/devices/"+deviceId+"/settings/address",
Authorization: "Bearer" +accessToken
};
getLocation(options,function(rep,err){
if(err){
console.log(err);
}else{
var speechOutput = "Your adress is "+rep.addressLine1;
var repromptText = speechOutput;
var shouldEndSession = true;
callback({},
buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));
}});
}
function getLocation(options,callback){
https.get(options,function(res){
var body = '';
res.on('data',function(chunk){
body+=chunk;
});
res.on('end',function(){
var result = JSON.parse(body);
console.log(result);
try{
callback(result);
}catch(e){
console.log("error\n"+e);
callback("Something is wrong");
}
});
}).on('error',function(e){
console.log("error in api:"+e);
callback('',e);
});
}
所以我真的想知道代码中的问题是什么。谢谢你们:))
答案 0 :(得分:1)
https.get(options, ...
在选项中我看到你有Host: "api.amazonalexa.com",
,所以你试图连接到那个,对吗?
但我发现它实际上是在尝试连接到127.0.0.1
?
您是否可以在主机文件中进行任何更改并将api.amazonalexa.com
映射到127.0.0.1
?
或者您的DNS服务器正在这样做?
您是否可以尝试在命令提示符nslookup api.amazonalexa.com
中运行以下命令并查看它返回的内容?
<强> LE 强>
请参见此处https://nodejs.org/api/http.html#http_http_request_options_callback Host
应为小写host
。如果你把它大写,它将不会使用它,默认为localhost
,127.0.0.1
就像你的错误一样。它还说hostname is preferred over host
所以使用该名称。 Endpoint
甚至不存在。它应该是path
。 Authorization
应为auth
。从那里阅读文档和示例,它应该可以工作。