我正在为Amazon Echo制作技能。在我的处理程序中,我有一个intent(SelectGardenIntent),它成功地从访问令牌获取user_id(跟随HTTP请求所需),以及一个名为gardenNumber的变量,它是一个槽值。要完成请求,我需要另外两个值,即garden_id和dev_id。我使用这个gardenNumber并将其传递给一个名为getGardenId的函数,该函数将HTTP请求中的一个数据分配给我在index.js中定义的变量garden_id。 user_id和gardenNumber没有问题。运行该函数时,请求中没有错误,但也没有执行带响应的回调函数。在测试时,user_id,“即将输入请求”和“req done”被正确记录,但回调函数中的其他日志语句不是因为它没有运行。结果是garden_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}`);
}
...
}
答案 0 :(得分:0)
您最好使用npm request拨打电话。
request.get({
url: 'http://' + server_ip + '/api/rest/client/getgardeninfo?&userid=' + user_id
}, function (err, res, body) {
console.log(body);
})