Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Javascript HTTP请求回调未触发_Javascript_Node.js_Alexa_Alexa Skills Kit_Alexa Skill - Fatal编程技术网

Javascript HTTP请求回调未触发

Javascript HTTP请求回调未触发,javascript,node.js,alexa,alexa-skills-kit,alexa-skill,Javascript,Node.js,Alexa,Alexa Skills Kit,Alexa Skill,我正在为亚马逊回声制作一项技能。在我的处理程序中,我有一个intent(SelectGardenIntent)可以成功地从访问令牌获取用户id(后续HTTP请求所需),还有一个名为gardenNumber的变量,它是一个插槽值。为了完成请求,我需要另外两个值,garden_id和dev_id。我使用这个gardenNumber并将其传递到一个名为getGardenId的函数中,该函数将HTTP请求中的一个数据分配给我在index.js中定义的变量garden_id。用户id和编号没有问题。当函数

我正在为亚马逊回声制作一项技能。在我的处理程序中,我有一个intent(SelectGardenIntent)可以成功地从访问令牌获取用户id(后续HTTP请求所需),还有一个名为gardenNumber的变量,它是一个插槽值。为了完成请求,我需要另外两个值,garden_id和dev_id。我使用这个gardenNumber并将其传递到一个名为getGardenId的函数中,该函数将HTTP请求中的一个数据分配给我在index.js中定义的变量garden_id。用户id和编号没有问题。当函数运行时,请求没有错误,但是带有响应的回调函数也不会执行。测试时,正确记录了用户id、“即将输入请求”和“req done”,但回调函数中的其他日志语句没有正确记录,因为它没有运行。结果是花园id未定义。dev_id是通过依赖于此garden_id的另一个方法获得的,因此dev_id也是未定义的。请在这个问题上帮助我。我已将相关代码粘贴到下面

...
var user_id, garden_id, dev_id;
...
function getGardenId (gardenNumber) {
  console.log(user_id);
  var path = '/api/rest/client/getgardeninfo?&userid=' + user_id;
  var options = {
    hostname: server_ip,
    port: 80,
    path: path,
    method: 'GET'
  }
  console.log("about to enter request");
  var req = http.request(options, (res) => {
    console.log('entered request');
    if (res.statusCode === 200) {
      console.log('successful request');
      res.setEncoding('utf8');
      var body = "";
      res.on('data', (chunk) => {
        console.log('adding data');
        body += chunk.toString();
      });
      res.on('end', () => {
        var obj = JSON.parse(body);
        console.log('successfully parsed');
        if (obj.error === 200) {
          console.log('##gardenid successfully obtained');
          garden_id = obj.data[gardenNumber - 1].id;
        } else {
          console.log("parsing error");
        }
      });
    } else {
      console.log("failed request");
    }
  }); } catch(e) {
    console.log("ERROR");
  }
  req.on('error', (e) => {
    console.error(`problem with request: ${e.message}`);
  });
  req.on('finish', () => {
    console.log('ended');
  })
  req.end();
  console.log("req done");
}
...
var handlers = {
...
'SelectGardenIntent': function () {
      //var filledSlots = delegateSlotCollection.call(this);
      var gardenNumber = this.event.request.intent.slots.Garden.value;
      user_id = this.event.session.user.accessToken;
      getGardenId(gardenNumber);
      getDevId(garden_id);
      this.emit(':tell', `OK, garden ${gardenNumber} selected, user id is ${user_id}, garden id is ${garden_id}, device id is ${dev_id}`);
 }
...
}
你最好用手机打电话

request.get({
    url: 'http://' + server_ip + '/api/rest/client/getgardeninfo?&userid=' + user_id
}, function (err, res, body) {
    console.log(body);
})

虽然
request
似乎是一个不错的小库,
http.request
应该完全可以工作。似乎没有任何改进。请求仍不起作用。请将您请求的完整url发布到@MichaelXUE。服务器ip为“www.raincon.com”,示例用户id为1037。url似乎有效。您是否安装了请求库?