С mongoose мы можем использовать некоторые промежуточные программы для манипулирования данными. Например, это известное использование промежуточного программного обеспечения save :
Schema.pre('save', function(next){
const user = this;
if (!user.isModified('password')) {
return next();
}
bcrypt.genSalt(10, (err, salt) => {
if (err) {
next(err);
}
bcrypt.hash(user.password, salt, null, (err, hash) => {
if (err) {
next(err);
}
user.password = hash;
next();
});
});
});
Я хотел бы знать, как сделать то же самое, когда вы пытаетесь обновить некоторые записи. Я читал на нескольких форумах, которые можно использовать: Schema.pre('update')
, я пробовал, но у меня это не работает. Идея состоит в том, чтобы повторно зашифровать новый пароль, когда пользователь хочет изменить его. Я знаю, что мог бы сделать это в контроллере, но я бы хотел снять эту ответственность и сделать это из схемы.
Результат должен быть примерно таким:
Schema.pre('onUpdate', function(next){
const user = this;
if (!user.isModified('password')) {
return next();
}
bcrypt.genSalt(10, (err, salt) => {
if (err) {
next(err);
}
bcrypt.hash(user.password, salt, null, (err, hash) => {
if (err) {
next(err);
}
user.password = hash;
next();
});
});
});