【问题标题】:Create a href link that uses http DELETE verb in express.js在 express.js 中创建一个使用 http DELETE 动词的 href 链接
【发布时间】:2015-01-19 10:20:39
【问题描述】:

我刚开始使用 handlebars.js 作为我的模板使用 express.js 我想创建一个删除链接,它应该是安静的并使用 http 动词 DELETE 而不是 GET。

我终于找到了一种方法来实现它,方法是创建一个如下所示的链接, 添加删除的数据方法,然后在客户端使用jquery进行拦截 我使用 DELETE 动词的链接。

我的链接是:

<a href="/destroy/{{_id}}" data-method="delete">delete</a>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$("a[data-method='delete']").click(function(){
    $.ajax({
        url: this.getAttribute('href'),
        type: 'DELETE'
    })
    return false
})
</script>

这是在 express.js/handlebars.js 中实现此目标的可推荐方式吗?有没有人有更好的实现方式?喜欢:

link_to("Destroy", "http://www.example.com", method: :delete)

【问题讨论】:

    标签: javascript node.js express handlebars.js


    【解决方案1】:

    感谢@tikider,我根据您的建议做了更多研究,发现了一个名为 method-override (https://github.com/expressjs/method-override) 的中间件,因为我想处理 DELETE,您的建议非常完整,因为表单无法发送 DELETE

    这就是我解决它的方法,首先我 npm 安装了方法覆盖:

    sudo npm install method-override --save
    

    将它附加到我的应用中间件处理程序:

    // override with POST having ?_method=DELETE
    app.use(methodOverride('_method'));
    

    然后我认为我将删除按钮设置为

    <form method="POST" action="/destroy/{{_id}}?_method=DELETE">
      <button type="submit">Delete</button>
    </form>
    

    现在每次我单击删除时,它都会被方法覆盖更改为 DELETE,并在我的应用程序中使用类似这样的中间件进行捕获:

    app.delete('/destroy/:id', function(req, res) {
       //...
    }
    

    当我使用车把模板时,我可以将其添加为辅助方法。

    【讨论】:

    • app.use(...之前添加const methodOverride = require('method-override')
    【解决方案2】:

    在您的情况下,Rails 创建一个 form 并将其方法设置为您提供的方法:

    method:HTTP 动词的符号 - 此修饰符将动态创建 HTML 表单并立即提交表单以使用指定的 HTTP 动词进行处理。 link_to in Rails Doc

    您可以在 javascript 中实现自己的:

    var link_to = function (text, href, method) {
        return '<form action="' + href + '" method="' + method + '" ><button>'+ text + '</button></form>'
    }
    

    您可以使用 css 将此按钮设置为普通链接的样式。

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 2012-12-19
      • 2016-11-10
      • 2019-07-19
      • 2022-10-20
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      相关资源
      最近更新 更多