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

4

我刚开始使用express.js和handlebars.js作为我的模板引擎。我想创建一个删除链接,它应该是restful风格并使用HTTP的DELETE方法而不是GET方法。

我最终找到了一种方法来实现这个目标,就是创建一个链接,并添加data-method属性,将其设置为delete,然后在客户端使用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个回答

1
感谢 @tikider,根据您的建议我进行了更多的研究,并找到了一个名为 method-override 的中间件 (https://github.com/expressjs/method-override)。由于我想要处理 DELETE 方法,您的建议非常完整,因为表单无法发送 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) {
   //...
}

作为使用handlebars模板的用户,我可以将其添加为一个帮助方法。

app.use(... 之前添加 const methodOverride = require('method-override') - Diego Somar

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接