gpt4 book ai didi

node.js - mongoose 5.7.0 中的自定义验证

转载 作者:太空宇宙 更新时间:2023-11-03 23:54:27 26 4
gpt4 key购买 nike

之前我使用的是旧版本的 mongoose,即 4.3.7,并且自定义架构验证作为预保存 Hook 工作正常。我所要做的就是将错误发送到回调函数。

现在升级到最新版本的 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”变量将是保存后回调,它在 .save() 调用期间自动进入,一切正常。

但是当我升级到最新版本的 Mongoose 时,validateUniqueEmail内的“callback”变量的值为null

我在网上没有找到任何有关如何对最新版本的 Mongoose 执行此操作的相关示例。我尝试发送真/假,但这也不起作用。

任何帮助都会很棒!

最佳答案

隐式异步自定义验证器(采用 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 .

关于node.js - mongoose 5.7.0 中的自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com