我正在努力使用Mongoose从我的数据库集合中删除一行。控制台表示删除成功(因为我处理了错误),但当我检查数据库时,该行仍在这里。我成功添加了一个具有post请求的成员,但无法删除它。我怀疑我的路由文件或我的hbs文件。下面是代码:
index.js(路由部分)
app.get('/delete',(req,res) => res.render('delete', {
title:'Member App',
}));
routes/members.js
// Delete member : DELETE
router.get("/delete", (req,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”类型(请参阅输入类型值)
您没有使用正确的字段
req.params.id
但我在您的请求中没有看到任何参数。
您只有用Id填充的主体,因此要使用它,您应该调用:
req.body.Id
首先,没有错误并不能保证删除数据库中的记录。因此在这种情况下,最好使用findoNeAndremove
方法。
第二个res.redirect(“/”);
将在记录删除完成之前调用,因此应该将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("/");
});