从多个模型中获取数据以进行渲染

时间:2013-08-06 18:22:36

标签: node.js mongodb mongoose

如果我想在页面上显示所有资源,我可能会这样做:

Resource.find({}).exec(function (err, resources) {                          
    res.render("view", {                                                   
        resources: resources

但是,如果我想同时在页面上显示所有资源所有项目,该怎么办?我能做到:

Resource.find({}).exec(function (err, resources) {
    Projects.find({}).exec(function (err, projects) {
        res.render("view", {
            resources: resources,
            projects: projects

我认为是更好/更正确的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

var async = require('async');
var resourcesQuery = Resource.find({});
var projectsQuery = Projects.find({});
var resources = {
  resources: resourcesQuery.exec.bind(resourcesQuery),
  projects: projectsQuery.exec.bind(projectsQuery)
};
async.parallel(resources, function (error, results) {
  if (error) {
    res.status(500).send(error);
    return;
  }
  res.render("view", results);
});

这将使查询并行而不是串行,这可能会更快。