简体   繁体   中英

Validation Error when insert new data using mongoose

I want to insert new data into a collection, but when I submit the form, I get a validation error.

ValidationError: Teacher validation failed: subject: Please enter subject, second_subject: Path second_subject is required.

HTML File

<form action="/register" method="post" id="form3">
    <div class="form-group"><label class="small mb-1">Full name</label><input class="form-control py-4" style="width: 50%;" type="name" name="name" placeholder="Enter full name" /></div>
    <div class="form-group"><label class="small mb-1" >Email</label><input class="form-control py-4" style="width: 50%;" type="username"  name="username" placeholder="Enter email address" /></div>
    <div class="form-group"><label class="small mb-1" >Password</label><input class="form-control py-4" style="width: 50%;" type="password"  name="password" placeholder="Password" /></div>
    <input type="hidden" id="roles" name="roles" value="Creator">
    <div class="form-group"><label class="small mb-1" >Select Primary Subject</label>
        <select name="subject" class="form-control" style="width: 30%;" id="subject">
            <option value="">-- Select Subject --</option>
            <% subject.forEach(function (subject) { %>
            <option value= "" ><%= subject.subject_name %></option>
            <% }) %>
        </select>
    </div>
    <div class="form-group"><label class="small mb-1" >Select Secondary Subject</label>
        <select name="secondary_subject" class="form-control" style="width: 30%;" id="secondary_subject">
            <option value="">-- Select Subject --</option>
            <% subject.forEach(function (subject) { %>
            <option value= "" ><%= subject.subject_name %></option>
            <% }) %>
        </select>
    </div>
    <div class="form-group"><label class="small mb-1" >Preferred Level of study</label>
        <select name="level" class="form-control" style="width: 30%;" id="level">
            <option value="">-- Select level --</option>
            <option value="Level 1">Level 1</option>
            <option value="Level 2">Level 2</option>
        </select>
    </div>
    <div class="form-group mt-4 mb-0"><input type="submit" value="Submit" style="width: 20%;" a class="btn btn-primary btn-block" href="/admin_user"></div>           
</form>

Route

if(req.body.subject && req.body.secondary_subject,req.body.level){
    var teacherData = {
        subject: req.body.subject,
        second_subject: req.body.secondary_subject,
        level: req.body.level,
        userId:req.session.userId,
    }
    Teacher.create(teacherData, function (err, teacher){
        if(err){
            return next(err)
        }else
        {
            console.log('Teacher details added'+teacher)
            return res.redirect('/admin_user');
        }
    });
}else{
    var err = new Error('All fields have to be filled out');
    err.status = 400;
    return next(err);
}

Schema

var TeacherSchema = new mongoose.Schema ({

    subject: {
        type:String,
        required:true,
    },

    level: {
        type:String,
        required:true,
    },


    second_subject: {
        type:String,
        required:true,
    },

    userId:{
        type:String,
        required:true,
    },

});

In your Route file, check for both "not null" and "not equal to empty string". This would ensure that empty strings are not entered to your database.

 if (req.body.subject.= null && req.body.subject.== "" && req.body.secondary_subject.= null && req.body.secondary_subject.== "" && req:body.level.= null && req,body:level.== "") { var teacherData = { subject. req,body:subject. second_subject. req,body:secondary_subject. level. req,body.level, userId, req.session.userId; } Teacher;create(teacherData; function(err. teacher) { if (err) { return next(err) } else { console;log('Teacher details added' + teacher) return res;redirect('/admin_user'); } }); } else { var err = new Error('All fields have to be filled out'); err.status = 400; return next(err); }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM