Node.js 仅当数据存在时才进行Mongoose强制验证
我正在创建一个用户模型,它将创建不同的策略,如本地、facebook、gmail。。。我希望每个对象都做自己的验证,但是如果我没有在本地输入值,我不想验证这个字段并得到一个错误 例如:Node.js 仅当数据存在时才进行Mongoose强制验证,node.js,mongodb,validation,mongoose,Node.js,Mongodb,Validation,Mongoose,我正在创建一个用户模型,它将创建不同的策略,如本地、facebook、gmail。。。我希望每个对象都做自己的验证,但是如果我没有在本地输入值,我不想验证这个字段并得到一个错误 例如: var UserSchema = new Schema({ local: { email : { type : String, required: true, validate: emailValidator, index : {
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);
});
我将收到一个错误,因为本地对象验证失败。因此,我如何使它们不相互依赖,并在插入值时仍然验证数据?您必须创建一个自定义验证程序,并检查是否设置了正确的策略:
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逻辑移动到此数组中的第二个函数,并将其移动到其他必填字段