在Sinatra你如何制作一个匹配所有路线的"之前"过滤器,除了一些

lms*_*lms 30 ruby sinatra

我有一个Ruby Sinatra应用程序,我有一些代码,我需要在所有路由上执行,除了一些例外.我该怎么做呢?

如果我想在选定的路由上执行代码(白名单样式),我会这样做:

['/join', "/join/*", "/payment/*"].each do |path|
    before path do
        #some code
    end
end
Run Code Online (Sandbox Code Playgroud)

我怎么做反过来(黑名单风格)呢?我想,除了匹配所有路由'/join','/join/*''/payment/*'

Kon*_*ase 38

负面预测:

before /^(?!\/(join|payment))/ do
  # ...
end
Run Code Online (Sandbox Code Playgroud)

pass:

 before do
   pass if %w[join payment].include? request.path_info.split('/')[1]
   # ...
 end
Run Code Online (Sandbox Code Playgroud)

或者您可以创建自定义匹配器.