2012-12-31 21 views
43

próbowałem użyć Mongoose wysłać listę wszystkich użytkowników, jak następuje:Mongoose: Pobierz pełną listę użytkowników

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

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

    res.send(users); 
}); 

oczywiście res.send(users); zamierza wysłać {}, który jest nie to, co chcę. Czy istnieje alternatywa find z nieco inną semantyką, w której mógłbym wykonać następujące czynności?

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

Zasadniczo chcę, aby wywołanie zwrotne zostało wykonane tylko wtedy, gdy wszyscy użytkownicy zostali pobrani z bazy danych.

+0

jak do niego dostęp w widok? – Saani

Odpowiedz

86

Dobrze, jeśli naprawdę chcesz, aby powrócić do mapowania z _id do user, zawsze można zrobić:

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() powraca wszystkie pasujące dokumenty w tablicy, więc Twoja ostatnia kod snipped wysyła tę tablicę do klient.

+0

Ok, więc byłem zdezorientowany co do semantyki 'find'. Dzięki. – Randomblue

+0

jak uzyskać do niego dostęp w widoku? – Saani

+0

Działa to świetnie, doceniam to. –

7

To tylko poprawa odpowiedzi @soulcheck i poprawienie literówki w ForEach (brakujący nawias zamykający);

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

Pozdrawiam!

+0

jak uzyskać do niego dostęp w widoku? – Saani

+1

wyjaśnić? Co chcesz robić? –

9

Jeśli chcesz wysłać dane do widoku przekazać następujące w.

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

Wewnątrz widoku można pętli danych przy użyciu zmiennych użytkowników

Powiązane problemy