我正在使用带有命名空间的 Sinatra。当我尝试使用条件时,我遇到了一个问题。
这是代码片段
class MainApp < Sinatra::Base
register Sinatra::Namespace
set(:role) do |role|
condition{
### DETECT WHERE THIS IS CALLED
p role
true
}
end
namespace '/api', :role => :admin do
before do
p "before"
end
get '/hoo' do
p "hoo"
end
end
namespace '/api' do
get '/bar' do
p "bar"
end
end
end
上述代码在访问时向控制台输出以下消息/api/hoo
:admin
:admin
"before"
:admin
"hoo"
我不明白为什么:admin
会显示三遍。但是,可能一个来自namespace
,其他两个来自before
和get '/hoo'
。
另一方面,访问/api/bar
显示:admin
两次。
我只想在之前进行过滤get '/hoo'
。有什么想法吗?
注意:我不想将 URL 从更改/api/hoo
为类似/api/baz/hoo