我一直在寻找一些代码来简化几天。试过很多选择,但我无法弄明白。
我想通过函数发出http请求,然后将数据恢复到另一个函数中使用。我的问题是我似乎无法在另一个函数中检索数据。 console.log工作正常。
function getData() {
request('http://' + address + ':' + port + '/all.xml', function (err, res) {
if (err) {
console.log('ERROR: Unable to get CyberQ Data')
}
else {
console.log(res.body);
return res.body;
}
});
}
以下代码是我的原始代码。也像魅力一样,期待最重要的部分,res.json。我喜欢将数据发送回浏览器,但结果在我添加res.json的地方的函数中不可用。
如果这两段代码中的任何一条都可以工作,我可以让我的代码工作。我可能忽略了一些基本的东在此先感谢您的任何帮助
router.get('/bbq/cyberqData', function (req, res) {
request('http://' + address + ':' + port + '/all.xml', function (err, res) {
if (err) {
console.log('ERROR: Unable to get CyberQ Data')
}
else {
console.log('getting the data ');
parseString(res.body, function (err, result) {
console.log(result.nutcallstatus);
return result;
});
}
});
res.json(result);
});
答案 0 :(得分:3)
移动res.json(result)
代替return result
应该这样做。
注意:您可能需要重命名变量。对于2个不同的对象,您使用2次res
答案 1 :(得分:2)
将res.json(results)
放入回调并修复变量的重叠。
router.get('/bbq/cyberqData', function (req, res) {
request('http://' + address + ':' + port + '/all.xml', function (err, res1) {
if (err) {
console.log('ERROR: Unable to get CyberQ Data')
}
else {
console.log('getting the data ');
parseString(res1.body, function (err, result) {
console.log(result.nutcallstatus);
res.json(result);
});
}
});
});
答案 2 :(得分:1)
您需要将res.json(results)
放入回调函数。
router.get('/bbq/cyberqData', function (req, res) {
request('http://' + address + ':' + port + '/all.xml', function (err, res) {
if (err) {
console.log('ERROR: Unable to get CyberQ Data')
}
else {
console.log('getting the data ');
parseString(res.body, function (err, result) {
console.log(result.nutcallstatus);
res.json(result);
});
}
});
});
您可以阅读有关javascript here的异步性质的更多信息。