nodejs和mongodb中的错误实现回调

时间:2016-03-15 07:09:49

标签: node.js mongodb

这是我的代码

.profile

我想在我的回复字段contvideo中插入事件的用户列表。

我使用了糟糕的回调?

更新2016年3月16日

我的解决方案是在函数中调用函数回调查找用户事件。

我的函数找到用户事件。

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);
});

我的过程活动是

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);


});};

1 个答案:

答案 0 :(得分: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);
});