2016-03-15 73 views
0

這是我的代碼的NodeJS執行錯誤回調和MongoDB

Event.find({ start_date: { $lte: new Date() }, end_date: { $gte: new Date() }, isDeleted: false }).limit(10).sort({ created_at: 'desc' }).populate('moderator').exec(function (err, events) { 
    if (err) throw err; 

    var response = []; 
    events.forEach(function (ev) { 

     var moderatorName = ev.moderator.facebook.name; 

     User.find({ currentEvent: ev._id }).exec(function (err, users) { 

      callback(null, users); 
     }); 


     if (ev.isFanPage) 
      moderatorName = ev.fanPageName; 

     response.push({ eventId: ev._id, title: ev.name, description: ev.description, thumb: ev.thumb, moderator: moderatorName, moderatorFbId: ev.moderator.facebook.id, countPicture: ev.numberOfUploadedImages, countVideo: users }); 
    }); 

    next(response); 
}); 

我要插入事件的用戶列表中現場contvideo了我的迴應。

我用不好的回調?

UPDATE 16/03/2016

我的解決辦法是在功能上查找用戶的事件調用回調函數。

我的功能找到用戶的事件。

exports.getEventUsers = function (id, next, callback) { 
console.log("id evento " + id); 
User.find({ currentEvent: id }).exec(function (err, users) { 
    if (err) 
     res.send("ERROR"); 

    callback(users); 


});}; 

我的理線事件是

Event.find({ isDeleted: false }).limit(10).sort({ created_at: 'desc' }).populate('moderator').exec(function (err, events) { 
    if (err) throw err; 

    var response = []; 
    var namearray = []; 
    var total = events.length; 
    console.log("cant evento" + total); 
    events.forEach(function (ev) { 

     var moderatorName = ev.moderator.facebook.name; 
     var usuario = []; 
     if (ev.isFanPage) 
      moderatorName = ev.fanPageName; 

     console.log("evento id " + ev._id); 

     exports.getEventUsers(ev._id,next,function(retorno) { 
      total--; 
      console.log("evento id " + ev._id); 
      console.log("cantidad elementos evento " + response.length); 
      response.push({ eventId: ev._id, title: ev.name, description: ev.description, thumb: ev.thumb, moderator: moderatorName, moderatorFbId: ev.moderator.facebook.id, countPicture: ev.numberOfUploadedImages, participantes: retorno.length }); 

      if(total == 0) 
      next(response); 

     }); 

    }); 

    console.log("termino el proceso"); 
}); 
+0

如果發生錯誤,您可以使用'next(err)',並在中間件中的所有路由之後處理它。 –

回答

0

你可以把誤差next把手,讓它由錯誤處理的中間件。

Event.find({ start_date: { $lte: new Date() }, end_date: { $gte: new Date() }, isDeleted: false }).limit(10).sort({ created_at: 'desc' }).populate('moderator').exec(function (err, events) { 
    if (err) 
     next(err); 

    var response = []; 
    events.forEach(function (ev) { 
     var moderatorName = ev.moderator.facebook.name; 

     User.find({ currentEvent: ev._id }).exec(function (err, users) { 
      if err 
       next(err); 
      // DO whatever you want to with users 
     }); 

     if (ev.isFanPage) 
      moderatorName = ev.fanPageName; 

     response.push({ eventId: ev._id, title: ev.name, description: ev.description, thumb: ev.thumb, moderator: moderatorName, moderatorFbId: ev.moderator.facebook.id, countPicture: ev.numberOfUploadedImages, countVideo: users }); 
    }); 
    next(response); 
}); 

app.use(function(err, req, res, next){ 
    //handle the errors here. 
    console.log(err); 
    res.send(err); 
}); 
+0

謝謝,但錯誤是「用戶」沒有在下面的語句中定義。 response.push({............ countVideo:users}); –

+0

是的,這會引發錯誤,我評論了這一行。它的樣板代碼爲您想要的方法。如果你想要用戶對象,那麼你可以在'User.find'中加入'response.push'。 –

+0

是的,我可以把response.push放在裏面(user.find),但是我的回覆只包含用戶的事件。我需要所有與用戶有關的事件。你有我的問題代碼的例子嗎? –