Node.js多个HTTP请求

6

我是一个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个回答

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
感谢3on,我知道可以使用回调函数,但不确定使用异步方法是否更好。我需要总共进行4个请求,并希望启动它们,然后有类似于“全部完成”的事件,将查找映射并呈现页面。这可能只是我对异步的误解。 - Hans
1
这是纯异步的。这里没有任何阻塞。使用事件或回调只是处理异步的两种方式。 - 3on
感谢 @3on 的帮助。 - Mahtab Alam

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接