如何删除expressJS视图中的项目

时间:2016-06-14 15:24:48

标签: node.js express pug ejs

我正在构建一个ExpressJS应用程序,并希望在集合上添加删除图标以删除单个项目。

我有点困惑如何做到这一点。

  • 我想到的一种方法是将click事件绑定到快速视图中的图标,并在单击时对服务器执行ajax调用。

  • 另一种方法是在图标周围创建一个表单,图标将是一个按钮,单击该图标时会提交表单。

我对这两种方法没有信心,任何人都以优雅的方式思考这种方式

2 个答案:

答案 0 :(得分:0)

我推荐第二种方法,因为此时它更容易理解。

从你的话来说,我理解删除按钮可能是漏洞或安全漏洞,如果你做错了。确定它在任何方面都是删除按钮。 最安全的方法是使用会话变量。 除非获得授权(登录),否则用户无法删除。如果是,那么您在服务器上打开会话并向用户提供该会话的密钥。

在会话中,您可以通过提供在登录过程中提供给他的会话密钥,安全地存储与服务器交互的用户数据。

在此步骤中,用户将单击按钮以删除文档,但猜测他应该被授权删除此文档。这是他提供的会话密钥的时间,通知您他的身份。那么决定取决于您删除或拒绝他的请求。

所有上述词都是代码中会发生什么的概念。 我将为登录控制器编写两部分,以授予用户权限。第二个是删除文档控制器。

登录:

if(var user = isUser(username, password){
  //open session
  req.session.user_id = user._id
}   

删除文档控制器:

if(req.session.user_id){
  //if true that means he is logged in authorized user
  //you can also to check by his user_id if he has the privilege to delete the document 
  document.delete();//in mongoose model.remove();

}

此解决方案用于删除任何文档的安全性。

答案 1 :(得分:0)

您可以通过多种方式实现所寻求的结果。

  1. 您可以使用包含要删除的项目ID YourURL.com/item/delete/id的链接,并附加点击事件。单击链接时,您的处理程序应该能够获取id query参数并使用它来对服务器进行AJAX调用。

  2. 此外,你可以使用你所说的按钮,这与上面的按钮基本相同

  3. 底线是,两种方法都非常标准,有些人可以使用隐藏元素,HTML元素,几乎任何可以存储ID或值的东西,但你会发现大多数人也使用上述方法同样,哪个恕我直言是非常标准的。

    下面是它应该如何工作的片段,我不确定你是否使用任何Javascript库,所以我用Vanilla Javascript编写脚本,如果你没有使用任何Javascript库或框架我强烈建议你做,它有帮助通过处理Javascript的方式减少您从浏览器差异中获得的许多麻烦。

    PS:包含您尝试过的代码,以帮助说明如何回答您的问题。

    
    
    var makeDeleteCall = function(e, id) {
      e.preventDefault();
      console.log(id);
      // Make AJAX Call here to server to delete item with the ID
      //After call to remote server you can then update the DOM to remove the item
      document.getElementById(id).remove();
    }
    
    <!-- Using Link -->
    <a href="#/delete/1" onclick="makeDeleteCall(event, 1);" id="1">
       Delete Item
    </a>
    
    
    <br/>
    <br/>
    
    <!-- Using a Button-->
    <button onclick="makeDeleteCall(event, 2);" id="2">
      Delete Button
    </button>
    &#13;
    &#13;
    &#13;

    Link to JSFiddle