我刚开始使用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)
答案 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) {
//...
}
当我使用把手模板时,我可以将其添加为辅助方法。