0

我正在开展一个学校项目,并试图从URL中获取数据以便与我的Alexa技能集成。我绝对是一个NodeJS初学者,并没有很多HTML或JSON的背景知识。针对亚马逊Alexa技巧的NodeJS问题

我的学校有一个“API”我们的运输系统在这里:https://prtstatus.wvu.edu/api/ 样本情况下带有时间戳是在这里:https://prtstatus.wvu.edu/api/1501906657/?format=json

在我的代码,我试图让解析为JSON字符串从从URL中获取,但遇到了格式化问题,以便字符串的“message:”部分将被传递。这里是我的AWS LAMBDA我的意图代码:

'getPRTStatus': function() { 
    var date = Math.round(new Date().getTime()/1000); 
    var http = require('http'); 
    var https = require('https'); 

    var options = { 
     host: 'https://prtstatus.wvu.edu', 
     path: '/api/'+date+'/?format=json' 
    }; 
    var object; 
    var callback = function(response) { 
     var str = ''; 

     //another chunk of data has been recieved, so append it to `str` 
     response.on('data', function (chunk) { 
      str += chunk; 
     }); 

     //the whole response has been recieved, so we just print it out here 
     response.on('end', function() { 
      console.log(str); 
      object = JSON.parse(str); 
     }); 
    } 

    https.request(options, callback).end(); 
    this.attributes.speechOutput = this.t(object.message); 
    this.attributes.repromptSpeech = this.t(object.message); 
    this.emit(':ask', this.attributes.speechOutput, this.attributes.repromptSpeech); 
}, 

回答

0

有几个需要在代码中解决的事情:

  1. 在选项中,你不需要指定协议。根据http文档,选项主机应该只是域名。所以在这种情况下,它将是“prtstatus.wvu.edu”

  2. object.message在回调完成之前正在使用。因此,你可能会看到像“不能读取属性”消息“未定义”的错误。需要发生的是3行(this.attributes ...)是回调本身的一部分。