Express不支持数据方法?

时间:2015-05-20 14:38:39

标签: ruby-on-rails node.js html5 express

我学习了Rails并且用HTML知道: <a rel="nofollow" data-method="delete" href="/logout">Log out</a> ... Rails可以接收“删除”方法。现在我以这种方式使用node和express,但Web服务器接收“Get”方法。

rails如何支持 data-method =“delete”,以及如何明确支持它?

2 个答案:

答案 0 :(得分:2)

它使用rails工作,因为Rails添加了一个js文件,该文件捕获具有此类属性的链接上的事件,然后使用改编的动词触发相应的请求。

See here

我猜你可以拿这个js文件,只是确保你有jQuery并且它不会干扰你自己的脚本。

此外,Rails包含一个中间件,它检查_method参数并根据它更改http动词。

使用method-overrideapp.use(methodOverride('_method'))

,您可以使用相同的行为

答案 1 :(得分:1)

这是在JQuery中处理的,它使用的具体功能就是这个 -

// Handles "data-method" on links such as:
// <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>
handleMethod: function(link) {
  var href = rails.href(link),
    method = link.data('method'),
    target = link.attr('target'),
    csrfToken = $('meta[name=csrf-token]').attr('content'),
    csrfParam = $('meta[name=csrf-param]').attr('content'),
    form = $('<form method="post" action="' + href + '"></form>'),
    metadataInput = '<input name="_method" value="' + method + '" type="hidden" />';

  if (csrfParam !== undefined && csrfToken !== undefined) {
    metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />';
  }

  if (target) { form.attr('target', target); }

  form.hide().append(metadataInput).appendTo('body');
  form.submit();
},