在以下代码中,未保存用户。
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,
},
...
});
答案 0 :(得分:1)
尝试以下方法,它在类似情况下对我有用:
req.user.settings.onboarding[req.body.page] = true;
req.user.markModified('settings.onboarding');
req.user.save()
像设置示例一样,设置数组索引时似乎缺少保存。标记修改后的数组可以正确进行保存。