使用 app.delete [express.js] 删除 mongo 数据库中的 collections

Use app.delete [express.js] to delete collections in a mongo database

问题 1:

我想知道 app.delete 的目的是什么。

我的数据库中有这个用于删除 collection 的动态按钮:

<a class="destroy" href="delete/839894898293"> Delete </a>

839894898293 = _ID(我正在使用 EJS 填充此按钮。

而且我有这条 app.get 路线可以通过 ID 找到 collection 并将其删除:

app.get('/delete/:id', function(req, res) {
 var id = req.param("id");

        MyModel.remove({
            _id: id 
        }, function(err){
            if (err) {
                console.log(err)
            }
            else {
                res.send("Removed");
            }
        });
}

这是 100% 工作,我可以使用.. 但是,为什么 app.delete 存在??难道我做错了什么???我可以使用 app.delete???

问题 2:

我正在使用以下代码来确认删除:

$(document).ready(function() {
    $('.destroy').click(function() {
        confirm("Are you sure?");
    });
});

当我点击时,会出现确认,但如果我取消,collection 无论如何都会被删除。为什么?我该如何修复??

对于问题 1:

app.delete 用于 DELETE HTTP 动词。 app.get 用于发出 GET 请求; app.delete 用于 DELETE 个。

第2题:

$('.destroy').click(function() {
    confirm("Are you sure?");
});

您 运行 confirm 然后放弃结果。您需要 return 结果才能取消它:

$('.destroy').click(function() {
    return confirm("Are you sure?");
});

您可能希望为此使用 app.delete,而不是 app.get。这是因为 app.get 将响应对您的资源的 GET 请求,即方法类型为 GET 的 HTTP 请求。这通常用于从 Web 服务器获取信息,并且通常不应有任何副作用(即影响您的数据)。这是因为网络爬虫通常会命中所有 GET 端点。如果 google 爬虫要访问您的页面,请查看 link,然后跟随它,您真的希望 Google 不小心删除您的数据吗?可能不会。

您可以找到更多关于 HTTP 方法的信息 here

app.delete('/delete/:id', function(req, res) {
var id = req.param("id");
    MyModel.remove({
        _id: id 
    }, function(err){
        if (err) {
            console.log(err)
        }
        else {
           return res.send("Removed");
        }
    });
});

然后对于按钮,@scimonster 为您阐明了它。 为了它也能正常工作 端点 /delete/:id 需要指向正确的项目,trim 来自浏览器的 url 中的每个白色 space。