1

我正在使用 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);
});

任何帮助都会很棒。

4

1 回答 1

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);
    }
  }
};
于 2013-10-27T01:00:02.070 回答