Экспресс не сохраняется после req.user.save () - PullRequest
0 голосов
/ 09 июля 2019

В следующем коде пользователь не сохраняется.

router.patch('/onboard', auth.requireLoggedIn, function (req, res) {
  if (req.user.settings.onboarding[req.body.page]) {
    res.status(409).json({
      status: 'Error: Trying to onboard for a page that has already been onboarded.',
    });
  }

  console.log(req.body.page);
  req.user.settings.onboarding[req.body.page] = true;
  console.log(req.user.settings.onboarding);
  req.user
    .save()
    .then(function (res) {
      console.log(res);
      res.status(200).json({
        status: 'Successful',
      });
    })
    .catch(function () {
      res.status(500).json({
        status: 'Internal server error.',
      });
    })
  ;
});

req.user.settings.onboarding.equityCalculator начинается как false, и я хочу установить его как true.Все журналы консоли показывают, что это происходит.Однако, когда я проверяю свою базу данных, она не обновляется.

Под «проверкой моей базы данных» я подразумеваю «смотреть в Robo 3T».Но я также имею в виду запросы к базе данных и поиск пользователя, которого я получаю.

Кроме того, следующий код работает отлично.Я не вижу, как этот код работает, но код выше не работает.

router.patch('/subscribe-to-email', auth.requireLoggedIn, function (req, res) {
  if (req.user.emailOptIn) {
    res.status(409).json({
      status: 'You can\'t subscribe if you are already currently subscribed.',
    });
  }

  req.user.emailOptIn = true;
  req.user
    .save()
    .then(function () {
      res.status(200).json({
        status: 'Successful',
      });
    })
    .catch(function () {
      res.status(500).json({
        status: 'Internal server error.',
      });
    })
  ;
});

Вот соответствующая часть моей пользовательской схемы:

UserSchema = new mongoose.Schema({
  emailOptIn: {
    type: Boolean,
    default: false,
    required: true,
  },
  settings: {
    type: mongoose.Schema.Types.Mixed,
    required: true,
    default: defaultSettings,
  },
  ...
});

1 Ответ

1 голос
/ 09 июля 2019

Попробуйте следующее, у меня это сработало в аналогичной ситуации:

req.user.settings.onboarding[req.body.page] = true;
req.user.markModified('settings.onboarding');
req.user.save()

Кажется, что отсутствие сохранения сохраняется при настройке индексов массива, как в вашем примере.Пометка измененного массива позволяет правильно выполнить сохранение.

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