I am working on a NodeJS application where, express is the framework & MongoDB is the database. I am using mongoose plugin for it.
I have a parent model. I have added unique: true to field "mobile". But whenever I add same mobile number, uniqueness validation fails. Nothing happens rather duplicate document gets saved. The required validation works fine but unique validation does not work only in this particular model.
Below is the model parentModel.js
var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs');
mongoose.set('useCreateIndex', true);
var Schema = mongoose.Schema;
var parentSchema = new Schema({
'name' : {
type: String,
required: true
},
'mobile' : {
type: Number,
unique: true,
required: true
},
'password' : {
type: String,
select: false
},
'address' : {
type: String,
required: true
},
'notifications' : [{
'title': {
type: String,
required: true
},
'body': {
type: String,
required: true
},
'path': {
type: String,
required: true
},
}],
'activities' : [{
'title': {
type: String,
required: true
},
'body': {
type: String,
required: true
},
'date': {
type: Date,
required: true
}
}],
'isVerified' : {
type: Boolean,
default: false
}
},
{
timestamps: true
});
parentSchema.pre('save', function (next) {
var parent = this;
if (this.isNew) {
var randomstring = Math.random().toString(36).slice(-8);
bcrypt.genSalt(10, function (err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(randomstring, salt, null, function (err, hash) {
if (err) {
return next(err);
}
parent.password = hash;
next();
});
});
}
else if (this.isModified('password')) {
bcrypt.genSalt(10, function (err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(parent.password, salt, null, function (err, hash) {
if (err) {
return next(err);
}
parent.password = hash;
next();
});
});
}
else {
return next();
}
});
parentSchema.methods.comparePassword = function (passw, cb) {
console.log(passw)
bcrypt.compare(passw, this.password, function (err, isMatch) {
if (err) {
return cb(err);
}
cb(null, isMatch);
});
};
module.exports = mongoose.model('parent', parentSchema);
Below is the controller parentController.js
create: function (req, res) {
var parent = new parentModel({
name : req.body.name,
mobile : req.body.mobile,
address : req.body.address
});
parent.save(function (err, parent) {
if (err) {
return res.status(500).json({
message: 'Error when creating parent',
error: err
});
}
return res.status(201).json(parent);
});
}