繁体   English   中英

创建一个在express.js中使用http DELETE动词的href链接

[英]Create a href link that uses http DELETE verb in express.js

我刚刚开始使用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中实现此目标的推荐方法吗?有人有更好的实现此目标的方法吗?我无法在其帮助器中找到类似于rails的方法,例如:

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

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

方法:HTTP动词的符号-此修饰符将动态创建HTML表单,并立即使用指定的HTTP动词提交表单以进行处理。 Rails文档中的link_to

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

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

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

感谢@tikider,我根据您的建议进行了更多研究,并遇到了一种名为method-override( https://github.com/expressjs/method-override )的中间件。由于我想处理DELETE,因此您的建议相当完整,因为表格可以t发送DELETE

这是我解决的方法,首先我npm安装了method-override:

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>

现在,每当我单击删除时,它都会被method-override更改为DELETE,并在我的应用程序中使用中间件进行捕获:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM