2014-12-30 48 views
1

我剛開始使用Node.js的與快遞和貓鼬,我有一個愚蠢的問題...的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」,它是一個包含當前登錄用戶的所有組的陣列。

現在,這裏是我的問題:

其實,當有人瀏覽儀表板頁面,我想就(基於完全相同的圖案)第二查詢來獲取當前記錄的所有團體和所有文件在用戶中。

然後我會發送「用戶」,「myGroups」和「myFiles」到儀表板頁面。 我該怎麼做?

我試過幾件事情沒有結果那麼遠,我想我在Node.js的回調函數有點失落:d

非常感謝你的幫助。

回答

2

你這裏有兩種選擇:

1)處理回調地獄(內回調裏面回調...)來檢索3組數據。這種方式是最不優雅和高效的

2)使用庫將異步完成這項工作,並有一個回調時,所有的數據檢索,你可以使用async庫,這真是太棒了。在這種情況下,您將只有一個回調,您可以訪問您獲取的所有數據。

這裏,你可以在你的情況與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 
     }); 
    }); 
}); 
+0

真棒它完美的作品!非常感謝! – TehesFR