javascript - 在 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,
},
...
});
解决方案
尝试以下操作,它在类似情况下对我有用:
req.user.settings.onboarding[req.body.page] = true;
req.user.markModified('settings.onboarding');
req.user.save()
设置数组索引时似乎缺少保存,例如您的示例。标记修改后的数组允许正确进行保存。
推荐阅读
- python - 为什么while一直在这里循环?有人可以解释一下吗?
- javascript - 将画布中上传的图像保存到服务器
- python - 我怎样才能让我的不和谐机器人提到一个人的名字,然后在他们以在聊天中键入变量的形式猜出一个变量后说正确
- javascript - CSS/JavaScript 表行/数据显示和隐藏不适用于我的数据表。?
- javascript - 更改 MongoDB 文档/对象中的所有 MongoDB 对象 ID
- python - 理解变量选择的大型决策树图?
- variables - 我们可以将所有数据类型合二为一吗?
- python - 如何使用 Python 在 BeautifulSoup 中的同一 div 中提取具有相同标签的元素?
- python - Pandas - 在数据帧之间查找值并为匹配的系列添加值
- ruby-on-rails - Rails Admin -> 仅当用户具有角色 admin 时才能访问