一个函数内的多个Get请求

时间:2016-06-02 18:51:11

标签: node.js

我正在尝试将JSON从两个网址发送到一个网页(我正在创建一个网页)。当我发送一个请求时,它完美地工作,但是一旦我添加另一个请求,它就会发送一个错误,说“在发送之后无法设置标题:。

app.get("/service", function(req, res) {
    request("http://example.com", function(error, response, body) {
        if (!error && response.statusCode == 200) {
            var data = JSON.parse(body);
            res.render("example.ejs", { data: data });
        }
    })

    request("http://123.com", function(error, response, body) {
        if (!error && response.statusCode == 200) {
            var data = JSON.parse(body);
            res.render("example.ejs", { data: data });
        }
    })
});

1 个答案:

答案 0 :(得分:1)

发生此错误是因为您不允许将setCurrentLineItemValue渲染两次。我会告诉你两种方法来实现你的目标,没有任何错误。

1)这种方式是最佳实践。

example.ejs

和第二种方式:

2)这种做法是不好的做法,避免在回调中使用回调,但无论如何都可行。

// Install request-promise package first using this command below:
npm install request-promise;

// then replace your code with this one below: 

app.get("/service", function(req, res) {

    var request = require('request-promise');

    var data1;

    request("http://example.com")
    .then(function(data) {
        data1 = JSON.parse(data);

        return request("http://123.com");
    })
    .then(function(data) {
        data2 = JSON.parse(data);
        console.log('data1', data1, 'data2', data2);

        res.render("example.ejs", { data1: data1, data2: data2 });
    });

});

总结:我建议你使用1种方式,阅读这篇关于承诺的文章: https://strongloop.com/strongblog/promises-in-node-js-with-q-an-alternative-to-callbacks/并编写干净的代码。我只是解释说,promises是避免回调内部回调的工具。