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

时间:2015-01-07 15:57:55

标签: javascript node.js mongodb

问题1:

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

我在我的数据库中有删除集合的这个dinamically按钮:

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

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

我有这个app.get路由按ID找到集合并删除它:

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:

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

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

当我点击时,会出现确认,但如果我取消,则无论如何都会删除该集合。为什么?我该怎么办?

3 个答案:

答案 0 :(得分:3)

问题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?");
});

答案 1 :(得分:0)

您可能希望使用app.delete,而不是app.get。这是因为app.get将响应对您资源的GET请求,即方法类型为GET的HTTP请求。这通常用于从Web服务器获取信息,通常不应有任何副作用(即影响您的数据)。这是因为网络抓取工具通常会访问所有GET端点。如果谷歌抓取工具要点击您的页面,请看链接,然后按照它,您是否真的希望Google意外删除您的数据?可能不是。

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

答案 2 :(得分:0)

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需要指向正确的项目,修剪来自浏览器的网址中的每个空格。