So I have been struggling with this for the last couple of days.
I created a User schema in Mongoose, and I have a pre save hook that hashes it's password field. Every time i tried to save a user to the database, i noticed the save method was never invoked. The error message that I got made no sense to me (at the time). Turns out, it had nothing to do with the pre save hook, and everything to do with the schema itself.
const UserSchema = new mongoose.Schema(
{
fullName: {
type: String,
maxlength: 50
},
about: {
type: String,
maxlength: 500
},
gender: {
type: String,
},
dob: {
type: String,
},
school: {
type: String,
},
grade: {
type: String,
maxlength: 50
},
profilePicture: {
type: String,
},
resume: {
type: String,
},
email: {
type: String,
maxlength: 50
},
password: {
type: String,
minlength: 6
},
favoriteJobs: {
type: Array,
default: []
},
followedPost: {
type: Array,
default: []
},
posts: {
type: Array,
default: []
},
eventsGoing: {
type: Array,
default: []
},
studentChat: {
type: Array,
default: [StudentChatSchema]
},
mentorChat: {
type: Array,
default: []
},
notifications: {
type: Array,
default: []
},
})
Pre Save:
UserSchema.pre('save', function(next){
var user = this;
if (!user.isModified('password')) return next();
bcrypt.genSalt(10, (err, salt) => {
if (err) return next(err);
bcrypt.hash(user.password, salt, (err, hash) => {
if (err) return next(err);
if(hash) {
user.password = hash;
this.password = user.password;
console.log('Password Hashed');
console.log(user.password);
return next();
}
})
})
})
Error:
Error: key $isUnderneathDocArray must not start with '$'
at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:911:19)
at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:727:17)
at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:727:17)
at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)