MongooseJS Save不会调用回调

时间:2013-10-27 00:21:46

标签: node.js mongodb

我使用MongooseJS连接到MongoDB

我正在创建一个新团队。保存团队后,我想为我的用户添加对团队的引用。但不幸的是,每当我将团队添加到我的用户并保存用户时,我的回调就不会被调用。有什么想法吗?

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

任何帮助都会很棒。

1 个答案:

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