Mongoose findByIdAndUpdate, кажется, обходит мой предварительный хук "save" и возвращает устаревшие данные - PullRequest
0 голосов
/ 20 июня 2019

У меня есть предварительная ловушка "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», не должен быть обновленной пользовательской записью?

1 Ответ

0 голосов
/ 20 июня 2019

ОК, похоже, причина, по которой он обходит валидаторы, уже подробно описана здесь: Почему Mongoose не проверяет при обновлении?

Мне до сих пор не совсем понятно, почему runValidators =Значение true не активирует мое промежуточное ПО, или почему возвращенный объект User не является обновленной версией, но я все равно отмечу ее как завершенную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...