【问题标题】:Alexa nodejs device address apiAlexa nodejs设备地址api
【发布时间】:2018-04-20 23:16:04
【问题描述】:

我正在学习 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);
});
}

所以我真的很想知道我的代码有什么问题。谢谢大家:)

【问题讨论】:

  • 只是猜测,但由于端口是 443,请尝试使用 https.get 而不是 http
  • 试过但没有任何改变,但还是谢谢。

标签: node.js api https alexa alexa-skills-kit


【解决方案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 甚至不存在。应该是pathAuthorization 应该是 auth。从那里阅读文档和示例,它应该可以工作。

【讨论】:

  • >服务器:127.0.1.1 >地址:127.0.1.1#53 >非权威回答:>名称:api.amazonalexa.com >地址:54.239.28.187
  • 对不起,我试图让评论更正确,但我仍在学习......
  • 它解析为54.239.28.187,所以 DNS 似乎没问题。阅读我上面的答案,我已经更新了,因为这似乎是问题所在。
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
相关资源
最近更新 更多