我正在创建一个用户模型,它将创建不同的策略,如本地,脸书,gmail ......我希望每个对象都做自己的验证但是如果我没有把值放在本地,我不想要验证此字段并收到错误。
例如:
var UserSchema = new Schema({
local: {
email : {
type : String,
required: true,
validate: emailValidator,
index : {
unique: true
}
},
firstName: {
type : String,
validate: nameValidator,
required: true
},
password : {
type : String,
validate: passwordValidator,
required: true
}
},
facebook: {
id : String,
email: String,
name : String
}
});
现在我想保存一些来自facebook的用户:
var newUser = new User();
newUser.facebook.id = profile.id;
newUser.facebook.name = profile.name.givenName;
newUser.facebook.email = profile.emails[0].value;
newUser.save(function( err, user ) {
if( err ) console.log(err);
done(null, user);
});
我会收到错误,因为本地对象验证失败了。那么我怎样才能使它们不依赖于彼此,并在插入值时仍然验证数据?
答案 0 :(得分:0)
您必须创建自定义验证器并检查是否设置了正确的策略:
var emailValidator = [
{
validator: function(value) {
if(!this.local) return true;
return value;
},
msg: 'Email is required.'
},
{
validator: function(value) {
/* your current validation */
},
msg: 'Your error message...'
}
];
只需将当前emailValidator
逻辑移动到此数组中的第二个函数,并将其执行到其他必需字段。