合并 Rack::Builder 和 Rack::Cascade
Combine Rack::Builder and Rack::Cascade
抱歉,如果这个问题与另一个问题重复,但我还没有找到它。
我有一些 Grape APIs(它们是 Rack 应用程序),其中之一(用户 API)使用中间件进行身份验证。
在我的 config.ru 文件中,我通过 Rack::Cascade 将所有 API 组合到一个应用程序中。这是代码:
user_management = Rack::Builder.new {
use Middleware
run UserAPI.new
}
app = Rack::Cascade.new [
user_management,
ExampleAPI1,
ExampleAPI2,
ExampleAPI3
]
问题是每次 API 中的任何一个收到请求时都会调用中间件。
有人对如何仅在用户 API 收到请求时使用中间件有任何建议吗?
这个问题的答案是我必须从 API 中删除资源(例如资源:用户),然后按如下方式使用 Rack::Builder:
app = Rack::Builder.new {
map '/user' do
use Middleware
run ExampleAPI1
end
map '/items' do
run ExampleAPI2
end
map '/locations' do
run ExampleAPI3
end
map '/reports' do
run ExampleAPI4
end
}
Rack::Cascade 的问题是它会从上到下尝试每个应用程序,直到找到合适的端点
抱歉,如果这个问题与另一个问题重复,但我还没有找到它。
我有一些 Grape APIs(它们是 Rack 应用程序),其中之一(用户 API)使用中间件进行身份验证。
在我的 config.ru 文件中,我通过 Rack::Cascade 将所有 API 组合到一个应用程序中。这是代码:
user_management = Rack::Builder.new {
use Middleware
run UserAPI.new
}
app = Rack::Cascade.new [
user_management,
ExampleAPI1,
ExampleAPI2,
ExampleAPI3
]
问题是每次 API 中的任何一个收到请求时都会调用中间件。
有人对如何仅在用户 API 收到请求时使用中间件有任何建议吗?
这个问题的答案是我必须从 API 中删除资源(例如资源:用户),然后按如下方式使用 Rack::Builder:
app = Rack::Builder.new {
map '/user' do
use Middleware
run ExampleAPI1
end
map '/items' do
run ExampleAPI2
end
map '/locations' do
run ExampleAPI3
end
map '/reports' do
run ExampleAPI4
end
}
Rack::Cascade 的问题是它会从上到下尝试每个应用程序,直到找到合适的端点