javascript - CRUD操作的不同方法有什么好处?

标签 javascript node.js express ejs

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

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

Controller 如下:

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;
  });
});

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

最佳答案

The following link is where the person briefly mentions this point [about ajax request being more secure], although he doesn't provide any explanation youtu.be/aZ16pkrMkZE?t=875

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

后者不仅违反约定(GET 请求不应更改数据),而且......不是不安全,而是“危险”。想象一下,谷歌爬虫访问您的网站并跟踪每个链接。噗,所有可删除的对象都消失了。

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

关于javascript - CRUD操作的不同方法有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55014648/

相关文章:

audio - 从 Nodejs 提供二进制/缓冲区/base64 数据

javascript - Markdown 加粗不带回溯的正则表达式

javascript - CSS 垂直 DIV 相互重叠(动态大小,实例)

node.js - 用于 node.js 插件开发的 CMake 或 gyp

javascript - 使用 mysql 对discord.js 进行排名

node.js - 从 AngularJS 发布时,FormidableJS 表单不解析

node.js - 无法使用 Node 和 Express(Jade、MongoDB、Express、Node)进行 POST

javascript - 在express js中制作api时出现 "cannot get"错误

javascript - 在 grunt 和 browserify 中使用 babel-polyfill

javascript - 重新初始化 kendo ui 对象时如何处理日期选择器