Sinatra 中的动词不可知匹配 [英] Verb-agnostic matching in Sinatra
本文介绍了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屋!
查看全文