node.js多个http请求

时间:2012-08-20 22:06:34

标签: node.js asynchronous

我是node和js的新手,并尝试在express中创建一个网站,在呈现页面之前进行三次Rest API调用。目前我有下面的内容,它返回一些json,我将其转换为对象列表。

其中一些属性只返回id值,我想再运行三个API请求,返回这些Id的查找,以便我可以将这些数据作为有意义的值呈现给用户。

我可以通过运行我当前呈现索引页面的下一个API调用来同步执行此操作,但这看起来非常混乱。我看到的所有异步教程都让我的新手思维方式混淆了。有人可以发布一个易于遵循的异步示例,这有点反映了以下结构吗?

var issues_json = "";
var request = http.request(options, function(response) {
    console.log("statusCode: ", res.statusCode);
    console.log("headers: ", res.headers);

    response.on("data", function(data) {
        issues_json += data;
    });

    response.on("end", function() {
        console.log(issues_json);
        var column_obj = JSON.parse(issues_json);
        res.render('index', {
            title: 'List of Issues',
            response: issues_json,
            objects: column_obj
        });
    });

    response.on("error", function(e) {
        console.log(e.Message);
        res.render('index', {
            title: 'error',
            e: e.Message
        });
    });
});
request.end();

2 个答案:

答案 0 :(得分:4)

您应该使用Request

你会有像

这样的东西
app.get("/route", function(req, res) {

  var callbackThree = function(error, resp, body) {
    var data = JSON.parse(body);
    res.send({title; "My Title", data: data});
  }

  var callbackTwo = function(error, resp, body) {
    request("api.com/42", callBackThree);
  }

  var callbackOne = function(error, resp, body) {
    request("api.com/things", callBackTwo);
  }

  request("api.com/users", callBackOne);
}

答案 1 :(得分:0)

检查一下:https://github.com/JacksonTian/eventproxy。它是一个js lib,可以对事件进行异步调用。与勾选答案的唯一区别在于它编写代码的方式。