2013-10-27 59 views
1

我使用MongooseJS連接到MongoDB的MongooseJS保存不會調用回調

我創建一個新的團隊。一旦我保存了團隊,我想爲我的用戶添加一個對團隊的引用。但不幸的是,無論何時我將團隊添加到我的用戶並保存用戶,我的回調都不會被調用。任何想法爲什麼?

TeamRepository.prototype.createForUser = function(user, data, callback) { 
    var team, 
    _this = this; 
    if (user == null) { 
    user = null; 
    } 
    if (data == null) { 
    data = {}; 
    } 
    if (callback == null) { 
    callback = (function() {}); 
    } 
    team = new Team({ 
    name: data.name, 
    description: data.description, 
    state: data.state 
    }); 
    return this.save(team, function(err) { 
    if (err) { 
     return callback(err, team); 
    } else { 
     user.teams.push({ 
     team: team._id 
     }); 
     return _this.save(user, function(err) { 
     return callback(err, team); 
     }); 
    } 
    }); 
}; 

具體是這條線。注意我有兩個嵌套保存。

return _this.save(user, function(err) { 
    return callback(err, team); 
}); 

任何幫助將是偉大的。

回答

5

我已經解決了這個問題。在我的用戶模型中,我掛鉤了保存事件,並沒有調用next()來移動保存。

schema.pre('save', function(next) { 
    var _this = this; 
    if (this.isNew || this.isModified('password')) { 
    return hashPassword(this.password, function(err, hash) { 
     if (err) { 
     return next(err); 
     } 
     _this.password = hash; 
     return next(); 
    }); 
    } else { 
    return next(); // missing this 
    } 
}); 

這是我的TeamRepository.save()看起來像你自問。

TeamRepository.prototype.save = function(model, callback) { 
    if (model == null) { 
    model = null; 
    } 
    if (callback == null) { 
    callback = (function() {}); 
    } 
    if (model) { 
    model.increment(); 
    return model.save(callback); 
    } else { 
    if (callback) { 
     return callback(null); 
    } 
    } 
}; 
+1

您應該將自己的答案標記爲正確答案 – numbers1311407