用Mongoose制作validation器的正确方法是什么?

我有一个userSchema,首先带有自己的validation器的电子邮件,用户名和密码字段。 然后,我想添加更多的领域,如生物,位置性别和生日,也与他们自己的validation。

const userSchema=new Schema({ email: { type: String, required: true, unique: true, lowercase: true, validate: emailValidators}, username: { type: String, required: true, unique: true, lowercase: true, validate: usernameValidators}, password: { type: String, required: true,validate: passwordValidators}, bio: { type:String,required:false,default:null,validate:bioValidators}, location: {type:String,required:false, default:null}, gender: {type:String,required:false,default:null,validate:genderValidators}, birthday: { type:Date,required:false,default:null} }); 

现在的问题是,当我想注册,它正在运行每个validation器,所以当然一​​个错误发生,因为在注册页面我甚至不要求生物,位置等。

我试着添加required:false但仍然没有工作,我没有find任何满意的答案

编辑

这是我如何创build一个新的用户

 router.post('/register',(req,res)=>{ if (!req.body.email) { res.json({success:false,message: 'You must provide an e-mail'}); } else{ if (!req.body.username) { res.json({success:false,message:'You must provide a username'}); } else{ if(!req.body.password){ res.json({success:false,message:'You must provide a password'}); } else{ let user= new User({ email: req.body.email.toLowerCase(), username: req.body.username.toLowerCase(), password: req.body.password }); user.save((err)=>{ if (err) { if (err.code === 11000) { res.json({success:false,message:'Username or e-mail already exists'}); }else{ if (err.errors) { if (err.errors.email) { res.json({success:false, message:err.errors.email.message}); } else{ if (err.errors.username) { res.json({success:false,message:err.errors.username.message}); } else{ if (err.errors.password) { res.json({success:false,message:err.errors.password.message}); } else{ res.json({ success:false,message:err}); } } } }else{ res.json({success:false,message:'Could not save user :', err}); } } } else{ res.json({success:true,message:'Account registered'}) } }); } } } }); 

我得到的错误是bioValidator和genderValidator。

实际上我的问题是,我如何select要执行的validation器。

编辑

为了使它工作,只需删除所需的validation字段如下:

 const userSchema=new Schema({ email: { type: String, required: true, unique: true, lowercase: true, validate: emailValidators}, username: { type: String, required: true, unique: true, lowercase: true, validate: usernameValidators}, password: { type: String, required: true,validate: passwordValidators}, bio: { type:String, default:null}, location: { type:String, default:null}, gender: { type:String, default:null}, birthday: { type:Date, default:null} });