【问题标题】:What is the correct way to make Validators with Mongoose用猫鼬制作验证器的正确方法是什么
【发布时间】:2017-08-23 18:37:42
【问题描述】:

我有一个 userSchema,首先是电子邮件、用户名和密码字段以及他们自己的验证器。 然后我想添加更多字段,例如简历、位置性别和生日,以及他们自己的验证器。

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}
});

现在的问题是,当我想注册时,它会运行每个验证器,所以当然会发生错误,因为在注册页面中我什至没有要求提供简历、位置等..

我尝试添加 required:false 但仍然无法正常工作,我没有找到任何令人满意的答案

编辑

这是我创建新用户的方法

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。

事实上我的问题是,我如何选择要执行的验证器。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    编辑

    为了使其正常工作,只需删除 required 和 validators 字段,如下所示:

    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}
    });

    【讨论】:

    • 如何创建新用户?你得到什么错误?
    • 您是否尝试删除validate:bioValidators
    • 是的,但如果我删除它,我将无法再对此进行验证
    • 您可以使用以下方式进行验证预保存:userSchema.pre('save', function (next) { let user = this; if (validate(this) { // doSmoething(); } else { // doSmoethingElse(); } });
    猜你喜欢
    • 2013-08-18
    • 2018-04-15
    • 2021-10-15
    • 2017-10-18
    • 2016-09-23
    • 1970-01-01
    • 2018-11-16
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多