2012-12-31 106 views
43

我曾嘗試使用貓鼬到如下發送所有用戶的列表的完整列表:貓鼬:獲取用戶

server.get('/usersList', function(req, res) { 
    var users = {}; 

    User.find({}, function (err, user) { 
     users[user._id] = user; 
    }); 

    res.send(users); 
}); 

當然,res.send(users);將派出{},這不是我想要的。是否有find備選方案,但語義略有不同,我可以執行以下操作?

server.get('/usersList', function(req, res) {  
    User.find({}, function (err, users) { 
     res.send(users); 
    }); 
}); 

本質上,我希望只有在所有用戶都從數據庫中獲取時才執行回調。

+0

如何訪問它的視圖? – Saani

回答

86

好吧,如果你真的想要一個映射返回從_iduser,你總是可以做:

server.get('/usersList', function(req, res) { 
    User.find({}, function(err, users) { 
    var userMap = {}; 

    users.forEach(function(user) { 
     userMap[user._id] = user; 
    }); 

    res.send(userMap); 
    }); 
}); 

find()返回所有匹配的文件在一個數組,所以你剪斷最後一個代碼發送一個陣列的客戶。

+0

好吧,所以我對'find'的語義感到困惑。謝謝。 – Randomblue

+0

如何在視圖中訪問它? – Saani

+0

這很好,我很感激。 –

7

這只是對@soulcheck的答案的改進,並修正了forEach中的拼寫錯誤(缺少右括號);

server.get('/usersList', function(req, res) { 
    User.find({}, function(err, users) { 
     res.send(users.reduce(function(userMap, item) { 
      userMap[item.id] = item; 
      return userMap; 
     }, {})); 
    }); 
}); 

乾杯!

+0

如何在視圖中訪問它? – Saani

+1

解釋?您想做什麼? –

9

如果您想將數據發送到一個視圖傳遞以下。

server.get('/usersList', function(req, res) { 
     User.find({}, function(err, users) { 
      res.render('/usersList', {users: users}); 
     }); 
    }); 

內,您的觀點,您可以通過數據循環使用的變量用戶