Sinatra 中的动词不可知匹配 [英] Verb-agnostic matching in Sinatra

查看:53
本文介绍了Sinatra 中的动词不可知匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们可以写

get '/foo' do...结尾

post '/foo' 做...结尾

这很好.但是我可以在一个路由中组合多个 HTTP 动词吗?

解决方案

这可以通过 multi-route 扩展是 sinatra-contrib 的一部分:

需要'sinatra'需要sinatra/multi_route"路线 :get, :post, '/foo' 做# "GET" 或 "POST"p request.env["REQUEST_METHOD"]结尾# 或者用于模块风格的应用程序类 MyApp <辛纳特拉::基地注册 Sinatra::MultiRoute路线 :get, :post, '/foo' 做# ...结尾结尾

但是,请注意,您可以通过以下方式在没有扩展的情况下自己完成:

foo = lambda 做# 你的路线在这里结尾得到 '/foo', &foo发布 '/foo', &foo

或者更优雅地作为元方法:

def self.get_or_post(url,&block)获取(网址,&块)帖子(网址,&块)结尾get_or_post '/foo' 做# ...结尾

您可能还对关于该功能的讨论感兴趣.>

We can write

get '/foo' do
  ...
end

and

post '/foo' do
  ...
end

which is fine. But can I combine multiple HTTP verbs in one route?

解决方案

This is possible via the multi-route extension that is part of sinatra-contrib:

require 'sinatra'
require "sinatra/multi_route"
route :get, :post, '/foo' do
  # "GET" or "POST"
  p request.env["REQUEST_METHOD"]
end

# Or for module-style applications
class MyApp < Sinatra::Base
  register Sinatra::MultiRoute
  route :get, :post, '/foo' do
    # ...
  end
end

However, note that you can do this simply yourself without the extension via:

foo = lambda do
  # Your route here
end
get  '/foo', &foo
post '/foo', &foo

Or more elegantly as a meta-method:

def self.get_or_post(url,&block)
  get(url,&block)
  post(url,&block)
end

get_or_post '/foo' do
  # ...
end

You might also be interested in this discussion on the feature.

这篇关于Sinatra 中的动词不可知匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆