我有这个简单的代码:
[{
Name : "Ram",
Id : 1,
Dept : "HR"
},
{
Name : "Shyam",
Id : 2,
Dept : "HR"
}]
该简单的应用程序应该将每条路由(包括{
Dept: "HR",
Result:
[{
Name : "Ram",
Id : 1
},
{
Name : "Shyam",
Id : 2
}
]
}
重定向到require 'sinatra'
before do
redirect '/login'
end
get '/login' do
'hello'
end
get '/test' do
'should not show'
end
路由。相反,我遇到了重定向循环。
我使用的是最新版本的Sinatra 2.0.5。
答案 0 :(得分:2)
您需要从before_filter中排除/login
条路线
before do
redirect '/login' if request.path_info != "/login"
end
答案 1 :(得分:0)
上面提供了一个解决方案,但解释是redirect
会触发浏览器重定向,因此该过程将在每次启动时重新开始。要使用服务器端重定向,请使用call
。来自the docs:
触发另一条路线
有时候通行证不是您想要的,而是您想要获得 呼叫另一条路线的结果。只需使用call即可实现:
get '/foo' do
status, headers, body = call env.merge("PATH_INFO" => '/bar')
[status, headers, body.map(&:upcase)]
end
get '/bar' do
"bar"
end
请注意,在上面的示例中,您将简化测试并增加 只需将“ bar”移到/ foo和 / bar。
如果您希望将请求发送到同一应用程序实例 而不是重复,使用通话!而不是致电。
如果想了解有关呼叫的更多信息,请查看机架规格。
因此,您可能需要一个助手(或者,如果要检查auth,则更可能是 condition )。