【发布时间】:2018-12-22 14:16:39
【问题描述】:
我有一个用于博客应用程序的简单 api,但在 mongoose 模型中使用 updateOne() 和 deleteOne() 方法更新/删除单个帖子时遇到问题。
逻辑很简单,通过查询参数中传入的id查找帖子,另外要求帖子的所有者id必须等于当前用户的id,通过token传入并通过中间件可用。
测试后文档:
{
"likes": 0,
"dislikes": 0,
"_id": "5c1a49464030141b3cc357c6",
"owner": {
"id": "5c1a49074030141b3cc357c5",
"firstName": "John",
"lastName": "Smith",
"avatarSrc": "/profile-avatars/avatar1545226503543.jpg"
},
"title": ".....",
"text": ".....",
"previewSrc": "/post-previews/preview1545226565915.PNG",
"__v": 0
}
应该更新帖子的代码:
router.put('/:id', authCheck, (req, res) => {
Post.updateOne({_id: req.params.id, 'owner.id': req.userId}, req.body)
.then((result) => {
console.log(result);
res.sendStatus(200);
});
});
问题是在'owner.id'查询中,postId和userId被正确接收但没有更新。
【问题讨论】:
-
请问您为什么要通过
_id和owner.id查询?为什么不只是_id?这实际上会运行得更慢。如果_id是唯一的,则不会重复;因此,您无需检查 2 个属性是否为真。 -
@MuhandJumah 用于授权目的。只有创建了特定帖子的用户才能编辑他
-
我明白了,我会将
owner设为索引,否则会导致性能不佳。回到你的问题,问题似乎是req.userId你能做console.log(req.userId)并确认输出吗? -
@MuhandJumah 是的,我已经检查了 10 次,它是正确的
-
我明白了,好吧,我们肯定知道一件事,一个帖子不能有不同的
owner,或者不同的_id,也不能有不同的__v,所以我们可以将更新更改为不包括那些?这样我们就可以得出一个结论是什么问题