0

我有以下情况:

class BaseApp < Sinatra::Base
  use Custom::Middleware
end

class MyApp < BaseApp
end

有没有办法在 MyApp 上卸载 Custom::Middleware?我已经搜索了一种与使用相反的方法,但没有找到任何东西。我知道最好不要从 BaseApp 继承,但是这个应用程序有一个常规的代码库,我需要 BaseApp 的一堆功能。

4

1 回答 1

0

我在 Sinatra 或 rack (builder) 中看不到任何可以让您卸载中间件的东西。Sinatra 将中间件作为数组存储在 @middleware 实例变量中。

您可以尝试在 config.ru 中加载自定义中间件:

map("/myapp") { run MyApp }
map("/baseapp") do
  BaseApp.use Custom::Middleware
  run BaseApp
end

如果这不起作用,则从 BaseApp 中删除中间件,并创建另一个继承自 BaseApp 的类,在那里定义自定义中间件,然后 MyApp 将没有该中间件集。

class BaseApp < Sinatra::Base
end

class SomeApp < BaseApp
  use Custom::Middleware
end

class MyApp < BaseApp
end
于 2013-08-01T22:11:24.130 回答