У меня есть предварительная ловушка "save" в моей модели User для шифрования пароля с использованием bcrypt, которая прекрасно работает при создании новой пользовательской записи. Тем не менее, при редактировании пользователя (я использую findByIdAndUpdate для краткости) и смене пароля, он, кажется, обходит этот хук и сохраняет в виде обычного текста. Из документации Mongoose я понял, что любые события обновления вызывают промежуточное ПО «сохранить», так почему это происходит и как я могу это исправить?
Кроме того, несмотря на использование async / await, ответ возвращает данные n-1.
exports.editUser = async function(req, res, next) {
try {
const user = await db.User.findByIdAndUpdate(req.params.id, req.body, {useFindAndModify: false});
return res.status('200').json(user);
}
catch(err) {
console.log(err);
return next({
status: 400,
message: 'User could not be updated or does not exist.'
});
}
};
Допустим, наша электронная почта начинается с "email@email.com", и я отправляю запрос PUT на мой маршрут редактирования для данного пользователя с req.body.email = "newemail@email.com". Возвращенный JSON все еще говорит "email: email@email.com". Допустим, я отправил еще один запрос PUT с req.body.email = "thirdemail@email.com". Возвращенный JSON теперь говорит: «email: newemail@email.com».
Таким образом, обновление происходит правильно, но возвращенный пользовательский объект не отражает обновление. Учитывая использование «await», разве пользовательский объект, представленный моей переменной «user», не должен быть обновленной пользовательской записью?