Я только что проверил это локально с помощью:
var result = Author.findOneAndUpdate({ _id: <some id> }, { password: '111' }).exec()
и этот pre
хук:
AuthorSchema.pre('findOneAndUpdate', function(next) {
this._update.password = 'BBB'
next();
});
Пароль был сохранен как BBB
Схема автораимеет поле пароля, которое type: String
Я на 3.6.5
В вашем случае bcrypt у вас также есть дополнительный next()
без else
, которыйпортит вам жизнь ... должно быть:
UserSchema.pre('findOneAndUpdate', function(next) {
const update = this.getUpdate();
if (!_.isEmpty(update.password)) {
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(update.password, salt, (err, hash) => {
this.getUpdate().password = hash;
next();
})
})
} else {
next();
}
});