在自己写的项目中的代码如下:
_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>
这篇文章可以参考,写的非常好: