提问者:小点点

使用nodejs和Mongoose删除请求


我正在努力使用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

共2个答案

匿名用户

您的输入类型标记错误。

<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("/");
});