Как мне вернуть обновленный документ после вызова функции document.save () в mon goose? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь создать страницу настроек, где пользователь может обновить свои учетные данные (имя пользователя и т. Д.). Длина имени пользователя составляет 5

код сервера (node.js)

/* ................ 
code to update other fields
...............*/

if (newUsername && newUsername !== user.username) {
     user.username = newUsername;
     messages.push({
          message: 'Username updated successfuly',
          error: false,
     });
}

await user.save({ j: true }, (err) => {
     if (err) {
     messages.push({ message: err.message, error: true });
     }
     res.clearCookie(accessTokenName);
     createJWTCookie(user, res);
     res.render('settings', { messages });
});

Однако это не работает, как я хочу этого. Встроенная проверка действительно срабатывает и предотвращает сохранение недопустимых полей, но токен по-прежнему обновляется с неверной информацией. Я считаю, что это связано с тем, что аргумент (пользователь) createJWTCookie все еще содержит информацию до запуска метода user.save().

Даже если я console.log(user) после запуска метода user.save() он содержит недопустимый ввод от пользователя. Но если я выхожу из системы и снова вхожу в систему (это создает новый JWT Cook ie с пользователем из базы данных), генерируемый токен будет иметь только действительные поля. Это означает, что были обновлены только действительные поля, в то время как другие изменения были отменены.

Как мне получить обновленный пользовательский документ после того, как user.save() был запущен, чтобы я мог создать действительный JWT cook ie без пользователя необходимо выйти и снова войти в систему?

1 Ответ

0 голосов
/ 27 мая 2020

Вызов user.save () не вносит никаких изменений в ваш пользовательский объект, он просто обновляет документ в вашей базе данных. Если встроенная проверка сработает из-за неверного имени пользователя, это предотвратит выполнение save () (что хорошо иметь в качестве отказоустойчивого), но не повлияет на фактический объект пользователя в вашем коде.

Чтобы решить эту проблему, вам нужно будет написать свою собственную проверку при обновлении пользовательского объекта. Это должно работать:

if (newUsername && newUsername !== user.username && newUsername.length > 5 && newUserName.length < 30) {
 user.username = newUsername;
 messages.push({
      message: 'Username updated successfuly',
      error: false,
 });

}

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