首页 > 解决方案 > 在 req.user.save() 后表示不保存

问题描述

在下面的代码中,用户没有得到保存。

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从 as 开始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,
  },
  ...
});

标签: javascriptnode.jsexpressmongoose

解决方案


尝试以下操作,它在类似情况下对我有用:

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

设置数组索引时似乎缺少保存,例如您的示例。标记修改后的数组允许正确进行保存。


推荐阅读