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 }); }); });