Это пример того, что я пытаюсь сделать, получить все сообщение внутри mongo db, поскольку каждый пост заполняет автора тогда используйте объект author для получения изображения профиля из Cloudinary.Как я могу заполнить массив во время асинхронного вызова и отправить его в объект-ответ.
Каков правильный способ сделать это? Я пробовал множество способов заполнения массивов и отправки их в ответ, но из-за асинхронного вызова они никогда не запускаются до отправки res.
router.get('/posts',auth, function(req, res, next) {
//var id = req.payload._id;
Post.find(function(err, posts){
if(err){ return next(err); }
posts.forEach(function(post){
post.populate('author',function(err,post){
post.image = cloudinary.image("v"+post.author.avatarVersion+"/profile/"+post.author._id,{
width:100, height:100,crop:'thumb',gravity:'face',radius:'max'
})
//here the post object is updated
console.log(post)
})
})
//res.json(some posts array);
});
});
Решение спасибо Dan Moldova!
router.get('/posts',auth, function(req, res, next) {
var id = req.payload._id;
Post.find({}).populate('author').exec(function(err,posts){
if(err){ return next(err); }
var updatedPosts = [];
posts.forEach(function(post){
post.image = cloudinary.image("v"+post.author.avatarVersion+"/profile/"+post.author._id,{
width:100, height:100,crop:'thumb',gravity:'face',radius:'max'
})
updatedPosts.push(post);
})
res.json(updatedPosts);
})
Hey Dan, благодарю вас за ответ! Это работает, чтобы сделать население более эффективным. Однако я все еще не могу разместить обновленный массив записей в res.json(). – Nafis
forEach является синхронным, поэтому вы должны иметь возможность res.json массива успешно сразу после forEach –
Ах, вы были правы! Спасибо .. – Nafis