121 votes

Mongoose : Obtenir la liste complète des utilisateurs

J'ai essayé d'utiliser Mongoose pour envoyer la liste de tous les utilisateurs comme suit :

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

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

    res.send(users);
});

Bien sûr, res.send(users); va envoyer {} ce qui n'est pas ce que je veux. Existe-t-il un find alternative avec une sémantique légèrement différente, où je pourrais faire ce qui suit ?

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

Essentiellement, je veux que le callback ne soit exécuté que lorsque tous les utilisateurs ont été récupérés dans la base de données.

192voto

soulcheck Points 17680

Eh bien, si vous voulez vraiment renvoyer un mapping de _id a user vous pouvez toujours le faire :

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() renvoie tous les documents correspondants dans un tableau, donc votre dernier bout de code envoie ce tableau au client.

16voto

bstory Points 547

Si vous voulez envoyer les données à une vue, passez ce qui suit.

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

Dans votre vue, vous pouvez boucler les données en utilisant la variable users

10voto

yasin Points 140

Il y avait le moyen très simple de répertorier vos données :

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

9voto

Evan P Points 1589

Il s'agit juste d'une amélioration de la réponse de @soulcheck, et de la correction de la faute de frappe dans forEach (parenthèse fermante manquante) ;

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

Santé !

4voto

vithu shaji Points 117

La même chose peut être faite avec async await et la fonction flèche.

server.get('/usersList', async (req, res) => {

const users = await User.find({});

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

res.send(userMap);

});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X