我正在嘗試制作一個迷你社交媒體 API,并希望確保每個用戶都可以評論和喜歡其他帖子,但不能在自己的帖子上這樣做。
這是我當前喜歡的系統的代碼,任何人都知道我如何撤銷對登錄的特定用戶喜歡帖子的權限?
// LIKE DISLIKE
router.put("/:id/like" ,verifyToken, async(req , res)=>{
try {
const post = await Post.findById(req.params.id);
if(!post.likes.includes(req.user._id)){
await post.updateOne({$push:{likes:req.user._id}})
return res.status(200).json("Post has been liked")
}else{
await post.updateOne({$pull:{likes:req.user._id}});
return res.status(200).json("Post has been unliked")
}
} catch (error) {
return res.status(500).json(err)
}
})
我試過將用戶 ID (user:req.user._id) 的引數與帖子中的用戶 ID 進行比較,但這沒有用。
發布模式
const mongoose = require('mongoose')
const postSchema = mongoose.Schema({
user:{
type:mongoose.Schema.Types.ObjectId,
required:true
},
title:{
type:String,
required:true
},
description:{
type:String,
required:true
},
likes:{
type:Array,
deafult:0
},
date:{
type:Date,
default:Date.now
},
comments:[
{
user:{
type:mongoose.Schema.ObjectId,
required:true
},
profile:{
type:String
},
comment:{
type:String,
required:true
},
date: {
type: Date,
default:Date.now
}
}
]
})
module.exports=mongoose.model('post',postSchema)
uj5u.com熱心網友回復:
您可以檢查是否user等于req.user._id并在這種情況下阻止操作。
此外,如果要在其中存盤用戶識別符號,則應將likes型別宣告更改為陣列:ObjectId
likes: [{
type: mongoose.Schema.Types.ObjectId,
deafult: []
}],
嘗試使用此代碼:
router.put('/:id/like', verifyToken, async (req, res) => {
try {
const post = await Post.findById(req.params.id);
if (post.user === req.user._id) {
return res.status(400).json({ message: 'You cannot like your own posts.' })
}
if (!post.likes.includes(req.user._id)) {
post.likes.push(req.user._id);
await post.save();
return res.status(200).json({ message: 'Post has been liked' });
} else {
post.likes = [...post.likes].filter(id => id !== req.user._id);
await post.save();
return res.status(200).json({ message: 'Post has been unliked' });
}
} catch (error) {
return res.status(500).json(err);
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/534205.html
