gpt4 book ai didi

javascript - Mongoose 验证 - 执行多个自定义验证

转载 作者:可可西里 更新时间:2023-11-01 10:28:48 25 4
gpt4 key购买 nike

我有一个基本的 Mongoose 模式:

var userSchema = new Schema({
userName: {type: String, required: 'Please enter a username'},
email: {type: String, required: 'Please enter email'},
password: {type: String, required: 'Please create a password'},
created: {type: Date, default: Date.now}
});

然后我执行一个自定义验证程序,它调用一个小型服务(在另一个文件中)来查找电子邮件地址是否已在使用中:

userSchema.path('email').validate(function(value, next) {
userService.findUser(value, function(err, user) {
if (err) {
console.log(err);
return next(false);
}
next(!user);
});
}, 'Already exists');

这是 findUser 方法:

exports.findUser = function(email, next) {
User.findOne({email: email.toLowerCase()}, function(err, user) {
next(err, user);
});
};

我的问题是:如果我想使用类似 validator 的模块验证输入是否是电子邮件,我将如何去做?我知道我可以要求模块并执行类似 validator.isEmail(email) 的操作并获得 bool 值作为返回,但我如何将其与我当前的设置集成?

最佳答案

最简单的方法就是在 validate 方法中检查它。如果电子邮件无效,它将返回验证错误。

var validator = require('validator');

// Validate email address
userSchema
.path('email')
.validate(function (value) {

return validator.isEmail(value);

}, 'Email is invalid');

这里有一些使用 constructor 检查电子邮件唯一性的建议:

// Validate that email is not taken
userSchema
.path('email')
.validate(function (value, respond) {
var self = this;

this.constructor.findOne({email: value}, function (err, user) {
if (err) {
return respond(false);
}

if (user) {
if (self.id === user.id) {
return respond(true);
}
return respond(false);
}
respond(true);
});
}, 'Already exists');

关于javascript - Mongoose 验证 - 执行多个自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30135268/

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