Reputation: 121
I been looking to some code now to simplify for days. Tried many options, but I am not able to figure it out.
I want to make an http request by a function and then get the data back to use in another function. My issue is that I cant seem to retrieve the data in another function. The console.log works fine.
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;
}
});
}
The below code is my original code. Also works like a charm, expect the most important part, res.json. I like to send the data back to the browser, but the result is not available in the function at the place I added res.json.
If either of these two pieces of code can work, I can make my code working. I probably overlook something basic. Thanks in advance for any help
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);
});
Upvotes: 1
Views: 7995
Reputation: 18097
put the res.json(results)
into the callback and fix overlapping of variables.
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);
});
}
});
});
Upvotes: 2
Reputation: 3568
Moving the res.json(result)
in place of return result
should do it.
Note: you may have to rename your variable. You use 2 times res
for 2 different objects
Upvotes: 3
Reputation: 1785
You need to put the res.json(results)
into the callback function.
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);
});
}
});
});
You can read more about the asynchronous nature of javascript here.
Upvotes: 1