1

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);
});

3 Answers 3

3

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

Sign up to request clarification or add additional context in comments.

3 Comments

Thanks for your response, but it doensnt work. Replace the return result with res.json(result) gives me the error undefined is not a function on the res.json line.
Change the res variable. You have 2... Try router.get('/bbq/cyberqData', function (req, routerRes) { then later routerRes.json(result) that should do it
Thanks, i totally overlooked it!
2

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);
        });
    }
});
});

Comments

1

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.