2013-10-27 3 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

문제를 해결했습니다. 내 사용자 모델에서 저장 이벤트에 연결하고 save()를 호출하여 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

관련 문제