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

时间:2014-11-21 09:53:06

标签: javascript node.js express handlebars.js

我刚开始使用handlebars.js作为模板玩express.js 我想创建一个删除链接,它应该是restful并使用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)

2 个答案:

答案 0 :(得分:0)

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

  

方法: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将此按钮设置为普通链接。

答案 1 :(得分:0)

谢谢@tikider我根据你的建议做了更多研究,并遇到了一个叫做方法覆盖的中间件(https://github.com/expressjs/method-override)因为我想处理DELETE你的建议很完整,因为表格不能发送DELETE

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

sudo npm install method-override --save

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

// 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) {
   //...
}

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