Я попытался использовать Mongoose для отправки списка всех пользователей следующим образом:
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);
});
});
По сути, я хочу, чтобы обратный вызов выполнялся только тогда, когда все пользователи были извлечены из базы данных.
javascript
node.js
mongodb
mongoose
Randomblue
источник
источник
Ответы:
Что ж, если вы действительно хотите вернуть отображение из
_id
вuser
, вы всегда можете сделать: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()
возвращает все совпадающие документы в массиве, поэтому последний фрагмент кода отправляет этот массив клиенту.источник
Если вы хотите отправить данные в представление, выполните следующие действия.
server.get('/usersList', function(req, res) { User.find({}, function(err, users) { res.render('/usersList', {users: users}); }); });
Внутри вашего представления вы можете перебирать данные, используя переменную users
источник
Это просто улучшение ответа @soulcheck и исправление опечатки в forEach (отсутствие закрывающей скобки);
server.get('/usersList', (req, res) => User.find({}, (err, users) => res.send(users.reduce((userMap, item) => { userMap[item.id] = item return userMap }, {})); ); );
ура!
источник
/userList
маршруту, вы получите объект JSON в формате:{"123451": {...user 123451}, "123452": {...user 123452} }
Это был очень простой способ перечислить ваши данные:
server.get('/userlist' , function (req , res) { User.find({}).then(function (users) { res.send(users); }); });
источник
То же самое можно сделать с помощью async await и стрелочной функции
server.get('/usersList', async (req, res) => { const users = await User.find({}); const userMap = {}; users.forEach((user) => { userMap[user._id] = user; }); res.send(userMap); });
источник
Если мы хотим
list all documents in Mongoose collection
послеupdate
илиdelete
Мы можем отредактировать функцию примерно так:
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.'); }); };
Это приведет
list all documents
к успеху, а не простоshowing success message
источник
Чтобы заставить функцию ждать, пока будет выбран список.
getArrayOfData() { return DataModel.find({}).then(function (storedDataArray) { return storedDataArray; }).catch(function(err){ if (err) { throw new Error(err.message); } }); }
источник
Мое решение
User.find() .exec() .then(users => { const response = { count: users.length, users: users.map(user => { return { _id: user._id, // other property } }) }; res.status(200).json(response); }).catch(err => { console.log(err); res.status(500).json({ success: false }) })
источник