【问题标题】:Return data from a http request function从 http 请求函数返回数据
【发布时间】:2015-06-29 18:06:00
【问题描述】:

我现在一直在寻找一些代码来简化几天。尝试了很多选项,但我无法弄清楚。

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

【问题讨论】:

    标签: javascript json node.js express


    【解决方案1】:

    移动 res.json(result) 代替 return result 应该可以做到。

    注意:您可能需要重命名变量。您对 2 个不同的对象使用了 2 次 res

    【讨论】:

    • 感谢您的回复,但它不起作用。用 res.json(result) 替换返回结果给我错误 undefined is not a function on the res.json 行。
    • 更改res 变量。你有 2... 尝试 router.get('/bbq/cyberqData', function (req, routerRes) { 然后稍后 routerRes.json(result) 应该这样做
    • 谢谢,我完全忽略了它!
    【解决方案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);
            });
        }
    });
    });
    

    【讨论】:

    • 是的,确实是这样。谢谢。
    【解决方案3】:

    您需要将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 的异步特性的更多信息。

    【讨论】:

      猜你喜欢
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 2021-11-01
      • 1970-01-01
      • 2016-10-16
      相关资源
      最近更新 更多