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 une alternative find
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);
});
});
En gros, je veux que le rappel ne soit exécuté que lorsque tous les utilisateurs ont été extraits de la base de données.
Eh bien, si vous voulez vraiment renvoyer un mappage de _id
à user
, vous pouvez toujours 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. Votre dernier code extrait envoie donc ce tableau au client.
Si vous souhaitez envoyer les données à une vue, transmettez ce qui suit:
server.get('/usersList', function(req, res) {
User.find({}, function(err, users) {
res.render('/usersList', {users: users});
});
});
Dans votre vue, vous pouvez parcourir les données à l’aide des utilisateurs variables.
Il y avait un moyen très simple de lister vos données:
server.get('/userlist' , function (req , res) {
User.find({}).then(function (users) {
res.send(users);
});
});
Ceci est juste une amélioration de la réponse de @soulcheck, et la correction de la faute de frappe dans forEach (crochet de fermeture manquant);
server.get('/usersList', function(req, res) {
User.find({}, function(err, users) {
res.send(users.reduce(function(userMap, item) {
userMap[item.id] = item;
return userMap;
}, {}));
});
});
à votre santé!
Même chose avec l'attente asynchrone 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);
});
Si nous voulons list all documents in Mongoose collection
après update
ou delete
Nous pouvons éditer la fonction à quelque chose comme ça:
exports.product_update = function (req, res, next) {
Product.findByIdAndUpdate(req.params.id, {$set: req.body}, function (err, product) {
if (err) return next(err);
Product.find({}).then(function (products) {
res.send(products);
});
//res.send('Product udpated.');
});
};
Ce sera list all documents
en cas de succès au lieu de showing success message