Sinatra 自定义路由匹配器
2023-12-19 16:14 更新
如上显示,Sinatra 内置了对于使用字符串和正则表达式作为路由匹配的支持。但是,它并没有只限于此。你可以非常容易地定义你自己的匹配器:
class AllButPattern
Match = Struct.new(:captures) # :captures键中存放的就是捕获的匹配文本
def initialize(except)
@except = except
@captures = Match.new([])
end
def match(str)
@captures unless @except === str
end
end
def all_but(pattern)
AllButPattern.new(pattern)
end
get all_but("/index") do
# ...
end
上面的例子可能太繁琐了,因为它也可以用更简单的方式表述:
get // do
pass if request.path_info == "/index"
# ...
end
或者,使用反向查找模式:
get %r{^(?!/index$)} do
# ...
end
以上内容是否对您有帮助:
更多建议: