从http请求函数返回数据

时间:2015-06-29 18:06:01

标签: javascript json node.js express

我一直在寻找一些代码来简化几天。试过很多选择,但我无法弄明白。

我想通过函数发出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);
});

3 个答案:

答案 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的异步性质的更多信息。