【问题标题】:node.js multiple http requestsnode.js 多个http请求
【发布时间】:2013-05-24 09:44:58
【问题描述】:

我是 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();

【问题讨论】:

    标签: node.js asynchronous


    【解决方案1】:

    你应该使用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);
    }
    

    【讨论】:

    • 谢谢 3on 我知道我可以使用回调,但想知道使用异步方法是否会更好。我总共需要发出 4 个请求,并且更愿意将它们启动,然后有类似“完成所有”事件的东西来映射查找并呈现页面。这可能只是我对异步的误解。
    • 这纯粹是异步的。这里没有任何阻碍。使用事件或回调只是处理异步的两种方式。
    • 感谢@3on 的帮助
    【解决方案2】:

    看看这个:https://github.com/JacksonTian/eventproxy。这是一个对事件进行异步调用的 js 库。与勾选答案的唯一区别是其编写代码的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-29
      • 2016-04-02
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多