CRUD操作差异方法有哪些好处?

问题描述 投票:0回答:1

执行CRUD操作时,我们可以使用form执行它,如下所示:

      <form action="/todo/<%= todos[i]._id %>?_method=DELETE" method="POST">
           <button>x</button>
      </form>

控制器如下:

app.delete('/todo/:id', (req, res) => {
    Todo.findByIdAndDelete(req.params.id, (err) => {
        if(err) {
            console.log(err);
        } else {
            res.redirect('/todo');
        }
    });
});

或者我们可以使用jQuery执行它,如下所示:

$(document).ready(function(){

$('form').on('submit', function(){

    var item = $('form input');
    var todo = {item: item.val()};

    $.ajax({
      type: 'POST',
      url: '/todo',
      data: todo,
      success: function(data){
        //do something with the data via front-end framework
        location.reload();
      }
    });

    return false;
  });
});

这两种方法有什么区别? (忽略那一个是执行'删除'而另一个是'发布')有人说后者比前者更安全,但找不到任何关于它的文献。

javascript node.js express ejs
1个回答
1
投票

以下链接是该人简要提到这一点[关于ajax请求更安全],尽管他没有提供任何解释youtu.be/aZ16pkrMkZE?t=875

他正在谈论其他事情。通过ajax执行DELETE请求并通过单击简单链接删除应用程序中的对象(这将导致GET请求)。

后者不仅违反惯例(GET请求不应改变数据),它也......不安全,但“危险”。想象一下,Google抓取工具会访问您的网站并跟踪每个链接。粉扑,所有可删除的对象都消失了。

在某些情况下,它也可能是不安全的。想象一下,为了创建/更新/删除对象,您需要以某种方式验证用户。说,使用身份验证令牌。由于它是普通链接和GET请求,因此令牌必须转到查询字符串。通过这种方式,它将被暴露给每个人看到,缓存在每个缓存代理中并在流量日志中永久存储。不太安全。

© www.soinside.com 2019 - 2024. All rights reserved.