使用Node.js和Mongoose删除请求

问题描述

我正在努力使用猫鼬从数据库集合中删除一行。控制台说删除成功(因为我处理了错误),但是当我检查数据库时,该行仍然在这里。我成功添加了具有发帖请求的成员,但无法将其删除。 我怀疑我的路线文件或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("/");
});