通过仅发送一个请求从多个表中获取数据

时间:2012-02-29 07:03:14

标签: node.js backbone.js

我使用node.js进行服务器端开发,使用backbone.js进行客户端开发。我想通过向node.js发送一个请求来从多个表(超过3个)中获取数据。但我无法将所有结果与node.js的异步执行相互合并。我已经完成了这个,但它向节点js发送了大量的get请求,用于从所有表中获取数据,因为我的站点的这些性能变得更慢。如果有人有任何想法,请帮助我。

1 个答案:

答案 0 :(得分:1)

我会创建一个聚合每个请求的结果并将响应发回的方法。基本上,您的三个异步数据库调用中的每一个都会将其数据传递给同一个方法。该方法将检查它是否具有完成请求所需的所有数据,如果有,则发送响应。

这是一个伪代码示例:

function handleRequest(req, res) {
        var results = {};

        db.getUsers(function(data) {
                aggregate('users', data);
        });

        db.getPosts(function(data) {
                aggregate('posts', data);
        });

        db.getComments(function(data) {
                aggregate('comments', data);
        });

        function aggregate(name, data) {
                results[name] = data;
                if(results.users && results.posts && results.comments) {
                        res.send(results);
                }
        }
}

这大大简化了,您当然也应该检查db调用的错误和超时,但这样可以让您在发送数据之前等待所有异步命令完成。