Trying to save the checked Genre checkbox data into database. But, it's not saving data.. .. instead it is saving an empty array for genre.
Tried to send data by following this thread, this thread. None of them, worked for me
I have attached create controller and form for that.
BookController create:
exports.bookCreate = [
(req, res, next) => {
if(!(req.body.genre instanceof Array)){
if(typeof req.body.genre==='undefined')
req.body.genre=[];
else
req.body.genre=new Array(req.body.genre);
}
next();
},
async(req, res, next) => {
const errors = validationResult(req);
const book = await new Book({
title : req.body.title,
genre : req.body.genre,
});
if (!errors.isEmpty()) {
async.parallel({
genres: (callback) => {
Genre.find(callback);
},
}, (error, values) => {
if(error) return next(error);
// Mark Selected Genres as Checked
for (let i = 0; i < values.genres.length; i++) {
if (book.genre.indexOf(values.genres[i]._id) > -1) {
values.genres[i].checked='true';
}
}
res.render('./book/create', {
title : 'Create Book',
genres : values.genres,
book : book,
errors : errors.array()
});
});
return;
} else {
book.save((error) => {
if(error) return next(error);
res.redirect('./');
});
}
}
];
create.ejs:
if errors
.alert.alert-danger(role='alert')
ul
for error in errors
li!= error.msg
form(method='POST' action='')
div.form-group
label(for='title') Title:
input#title.form-control(type='text', placeholder='Name of Book' name='title' value=(undefined===book ? '' : book.title) )
div.form-group
label Genre:
div
for genre in genres
div(style='display: inline; padding-right:10px;')
input.checkbox-input(type='checkbox', name='genre', id=genre._id, value=genre._id, checked=genre.checked)
label(for=genre._id) #{genre.name}
button.btn.btn-primary(type='submit') Submit
Any help would be appreciated.