在自己寫的項目中的代碼如下:
_id在mongodb中的數據類型是object 使用模板展示後,將其轉換爲類型。
<a href="/article/delete?id={{$value._id}}" class="btn btn-info btn-border btn-round btn-sm mr-2">
刪除
</a>
根據mongoose中的_id刪除某個文章,如上圖所示。
// 刪除文章
articleSchema.static('deleteById',function(id,callback){
this.deleteOne({
_id:id,
// _id:"5e4d32a116b7423900835e03"
},function(err){
callback(err)
})
})
如上圖所示定義了一個deleteById的靜態方法(deleteOne爲mongoose中提供的方法),當路由爲/article/delete的時候調用這個方法,調用如下圖所示:
// 刪除文章
router.get('/article/delete',function(req, res){
Article.deleteById(req.query.id,function(err){
if(err){
return res.status(500).send('Server error.')
}else{
console.log("刪除成功")
res.redirect("/")
}
})
})
當通過點擊<a>鏈接刪除某個文章時,發現刪除不成功。
在調試過程中將上述第二段代碼中的 _id:id中的id改爲一個確定的"5e4d32a116b7423900835e03",發現可以刪除成功。那麼問題顯而易見id不正確。
this.deleteOne({
_id:id, //這裏並不是"5e4d32a116b7423900835e03",而是' "5e4d32a116b7423900835e03" '
// _id:"5e4d32a116b7423900835e03"
},function(err){
callback(err)
})
將其打印出來發現
_id:id, //這裏並不是"5e4d32a116b7423900835e03",而是' "5e4d32a116b7423900835e03" '(多了一對引號)。
解決辦法:
改爲: ?id={{$value._id.toString()}}
<a href="/article/delete?id={{$value._id.toString()}}" class="btn btn-info btn-border btn-round btn-sm mr-2">
刪除
</a>
這篇文章可以參考,寫的非常好: