猫鼬 5.7.0 中的自定义验证

Custom validations in mongoose 5.7.0

以前我使用的是旧版本的猫鼬,即 4.3.7 并且自定义模式验证作为预保存挂钩工作美好的。我所要做的就是将错误发送到回调函数。

现在升级到最新版本的mongoose后,同样的验证功能不再起作用了。

我的架构如下所示:

var UserSchema = new Schema({
  email: {
    type: String,
    required: true,
    unique: true,
    validate: [validateUniqueEmail, 'E-mail address is already in-use'],
    lowercase: true
  }
}

在 mongoose 4.3.7 中,验证函数如下所示:

var validateUniqueEmail = function(value, callback) {
  var User = mongoose.model('User');
    User.find({
        $and: [{
            email: value
        }, {
            _id: {
                $ne: this._id
            }
        }]
    }, function(err, user) {
        callback(err || user.length === 0);
    });
};

在上面的代码中,"callback" 变量将是 post 保存回调,它在 .save() 调用期间自动进入并且一切正常很好。

但是当我升级到最新版本的猫鼬时,"callback"变量的值在validateUniqueEmailnull

我没有在网上找到任何有关如何为最新版本的猫鼬执行此操作的相关示例。我试过发送 true/false 但这也不起作用。

任何帮助都会很棒!

隐式异步自定义验证器(带有 2 个参数的自定义验证器)在 mongoose >= 4.9.0 中被弃用。在 docs 中,它还表示:

If you prefer callbacks, set the isAsync option, and mongoose will pass a callback as the 2nd argument to your validator function.

因此在较新的版本中,您需要指定 isAsync 选项才能使其正常工作。像这样:

var UserSchema = new Schema({
  email: {
    type: String,
    required: true,
    unique: true,
    validate: {
      isAsync: true,
      validator: validateUniqueEmail, 
      message: 'E-mail address is already in-use'
    },
    lowercase: true
  }
}

mongoose release notes 阅读更多内容。