问题描述
我正在努力使用猫鼬从数据库集合中删除一行。控制台说删除成功(因为我处理了错误),但是当我检查数据库时,该行仍然在这里。我成功添加了具有发帖请求的成员,但无法将其删除。 我怀疑我的路线文件或hbs文件。 这是代码:
Index.js(路线部分)
app.get('/delete',(req,res) => res.render('delete',{
title:'Member App',}));
routes / members.js
// Delete member : DELETE
router.get("/delete",res)=>{
console.log(req.params.id);
Member.deleteOne({ _id: req.params.id },function(err,data) {
if (!err) {
console.log(data);
console.log("member successfully deleted")
}
else {
console.log("error")
}
});
res.redirect("/");
});
delete.hbs
<h1 class = "text-center mb-3">{{title}}</h1>
<form action="/delete" method ="DELETE" class="mb-4">
<div class="form-group">
<label for="Id">Id</label>
<input type="Id" name="Id" class ="form-control">
</div>
<input type="submit" value ="Delete member" class="btn">
</form>
控制台:(似乎来自回调函数的数据未定义)
Connected to mongoDB
undefined
{ n: 0,ok: 1,deletedCount: 0 }
member successfully deleted
解决方法
您的输入类型标记错误。
<input type="Id" name="Id" class ="form-control">
输入中没有“ Id”类型(请参见input types values)
您没有使用正确的字段
req.params.id
使用过,但是您的请求中没有看到任何参数。
您的主体只有ID填充,因此要使用它,您应该致电:
req.body.Id
,
首先,如果没有错误,则不能保证删除数据库中的记录。因此,在这种情况下,最好使用findOneAndRemove
方法。
在记录删除完成之前将调用第二个res.redirect("/");
,因此重定向应移至回调函数中,例如:
Member.findOneAndRemove({ _id: req.params.id },function(err,member) {
if (!err && member) {
console.log(member);
console.log("member successfully deleted")
}
else {
console.log("error")
}
res.redirect("/");
});