node.js / express / mongoose noob问题

我刚开始用express和mongoose来使用node.js,我有一个愚蠢的问题…

在我的routes.js文件的某处,我有以下部分:

// DASHBOARD SECTION, GET MY GROUPS app.get('/dashboard', isLoggedIn, function(req, res) { var Group = require('../app/models/group'); //adding mongoose Schema Group.find({"groupDetails.userId" : req.user._id}) .exec(function(err, myGroups) { if (err) res.send(err); var myGroups = myGroups; //console.log("myGroups: " + myGroups); // check with "heroku logs" res.render('dashboard.ejs', { user : req.user, myGroups : myGroups }); }); }); 

此代码工作 。 当有人浏览仪表板页面时,我会收到“myGroups”,这是一个包含当前login用户所有组的数组。

现在,这是我的问题:

实际上,当有人浏览仪表板页面时,我想进行第二个查询(基于完全相同的模式)来获取当前login用户的所有组和所有文件。

然后我将发送“用户”,“myGroups”和“myFiles”到仪表板页面。 我怎样才能做到这一点 ?

到目前为止,我尝试了几个没有结果的东西…我想我有点在node.jscallback函数中丢失:D

非常感谢你的帮助。

你有两个select:

1)处理callback地狱(callback里面的callback…)来检索3组数据。 这种方式是最不优雅和高效的

2)使用一个asynchronous执行这个工作的库,当所有的数据被检索到时都有一个callback函数,你可以使用async库,这真是太棒了。 在这种情况下,您将只有一个callback,您可以访问您获取的所有数据。

以下是您可以在您的情况下使用async做些什么:

 var async = require('async'); .......... app.get('/dashboard', isLoggedIn, function(req, res) { var Group = require('../app/models/group'); //adding mongoose Schema var User = require('../app/models/user'); //adding mongoose Schema var Files = require('../app/models/files'); //adding mongoose Schema async.parallel({ groups: function(callback){ Group.find(...).exec(callback); }, users: function(callback){ Users.find(...).exec(callback); }, files: function(callback){ Files.find(...).exec(callback); } }, function(err, results) { if (err) res.send(err); var groups = results.groups; var users = results.users; var files = results.files; res.render('dashboard.ejs', { user : req.user, myGroups : groups, users: users, files: files }); }); });