I'm using NodeJS with express framework and mongoose and I made town input with logic where is no input, right input and already exist input. Maybe there is better solution but this working fine:
router.post('/create', (req, res)=>{
let errors = [];
if (!req.body.name) {
errors.push({message: 'Add town name!'});
}
if (errors.length > 0) {
res.render('admin/towns/index', {
errors: errors,
name: req.body.name
});
} else {
Town.findOne({name: req.body.name}).then(town=>{
if (!town) {
const newTown = Town({
name: req.body.name
});
newTown.save().then(savedTown=>{
req.flash('success_message', `Town ${savedTown.name} is activated`);
res.redirect('/admin/towns');
});
} else {
req.flash('error_message', 'Town name already exist!');
res.redirect('/admin/towns');
}
});
}
});
but, when I want to update, where is no input working fine, where name is new also working fine but if name exist it's shows me error:
(node:12140) UnhandledPromiseRejectionWarning: MongoError: E11000 duplicate key error collection: crm_electors.towns index: name_1 dup key: { : "Belgrade" }
router.put('/edit/:id', (req, res)=>{
let errors = [];
if (!req.body.name) {
errors.push({message: 'Add town name!'});
}
if (errors.length > 0) {
res.render('admin/towns/index', {
errors: errors,
name: req.body.name
});
} else {
Town.findOne({_id: req.params.id}).then(town=>{
if (req.body.name !== town) { // I guess this logic is wrong
town.name = req.body.name;
town.save().then(savedTown=>{
req.flash('success_message', 'Town name successfully renamed');
res.redirect('/admin/towns');
});
} else {
req.flash('error_message', 'Town name already exist!');
res.redirect('/admin/towns');
}
});
}
});
I presume this logic is wrong (req.body.name !== town), so I tried req.body.name !== town.name and some more variations but no luck.