表达后req.user.save()不保存

时间:2019-07-09 20:03:05

标签: javascript node.js express mongoose

在以下代码中,未保存用户。

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 个答案:

答案 0 :(得分:1)

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

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

像设置示例一样,设置数组索引时似乎缺少保存。标记修改后的数组可以正确进行保存。