【发布时间】:2021-08-26 00:18:03
【问题描述】:
在开发我的全栈应用程序(这是一个 facebook 克隆)时,我在我的服务器中发现了这个错误,我不知道如何解决它。
我正在使用 node.js、express、mongodb、mongoose 和 typescript,并且,在开发点赞出版物的路线中,发生了这个错误(以及在点赞 cmets 路线中)。
错误
VersionError: No matching document found for id "60bf5b73de309f1a30fe88a2" version 10 modifiedPaths "likes"
at generateVersionError (C:\Users\diego cifuentes\Desktop\Portafolio\Fullstack Projects\Facebook - MERN ( with next.js )\backend\node_modules\mongoose\lib\model.js:432:10)
at model.Model.save (C:\Users\diego cifuentes\Desktop\Portafolio\Fullstack Projects\Facebook - MERN ( with next.js )\backend\node_modules\mongoose\lib\model.js:488:28)
at C:\Users\diego cifuentes\Desktop\Portafolio\Fullstack Projects\Facebook - MERN ( with next.js )\backend\src\controllers\publication.ts:166:18
at Generator.next (<anonymous>)
at fulfilled (C:\Users\diego cifuentes\Desktop\Portafolio\Fullstack Projects\Facebook - MERN ( with next.js )\backend\src\controllers\publication.ts:5:58)
at runMicrotasks (<anonymous>)
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
version: 10,
modifiedPaths: [ 'likes' ]
}
VersionError: No matching document found for id "60bf5b73de309f1a30fe88a2" version 10 modifiedPaths "likes"
at generateVersionError (C:\Users\diego cifuentes\Desktop\Portafolio\Fullstack Projects\Facebook - MERN ( with next.js )\backend\node_modules\mongoose\lib\model.js:432:10)
at model.Model.save (C:\Users\diego cifuentes\Desktop\Portafolio\Fullstack Projects\Facebook - MERN ( with next.js )\backend\node_modules\mongoose\lib\model.js:488:28)
at C:\Users\diego cifuentes\Desktop\Portafolio\Fullstack Projects\Facebook - MERN ( with next.js )\backend\src\controllers\publication.ts:166:18
at Generator.next (<anonymous>)
at fulfilled (C:\Users\diego cifuentes\Desktop\Portafolio\Fullstack Projects\Facebook - MERN ( with next.js )\backend\src\controllers\publication.ts:5:58)
at runMicrotasks (<anonymous>)
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
version: 10,
modifiedPaths: [ 'likes' ]
}
这仅在客户端用户尝试多次单击“赞”按钮时发生,因此,问题没有给操作足够的时间与服务器交互。
我一直在寻找解决方案,并且我看到人们在这种情况下提到 .update() 而不是 .save,但是,我无法真正理解 .update() 的具体含义以及为什么它可能解决这个问题。
为了给你更多的上下文,这就是喜欢酒吧路线的逻辑
// Like Publication
export const likePublication = async (req: Request, res: Response) => {
const { publicationId } = req.params;
const { identifier } = req.body;
// Check id's
if (!mongoose.Types.ObjectId.isValid(identifier!))
return res.status(400).json({ Message: "identifier not valid" });
if (!mongoose.Types.ObjectId.isValid(publicationId!))
return res.status(400).json({ Message: "identifier not valid" });
// Find pub
const thePub: Ipub = await Publication.findById(publicationId);
// Find user
const theUser: Iauth = await User.findById(identifier);
try {
// Check if user already liked, if not, like the pub
if (thePub.likes!.find(f => f.identifier === theUser.id) === undefined) {
thePub.likes!.push({ identifier: theUser.id! });
}
// Check if user already liked, if user liked, cut like
else if (thePub.likes!.find(f => f.identifier === theUser.id)) {
thePub.likes = thePub.likes!.filter(
filt => filt.identifier !== theUser.id!
);
}
// Save
await thePub.save();
return res.json(thePub);
} catch (err) {
console.log(err);
return res.status(500).json({ Error: "the API failed" });
}
};
我该怎么办?谢谢!
【问题讨论】:
-
这看起来像是一个互斥锁的工作。
标签: node.js typescript mongodb express mongoose