我有一个经典风格的Sinatra应用程序,我正在使用use MyModularApp
添加模块化应用程序。
这很好用,当我运行经典应用程序时,可以使用经典模块和模块化应用程序的路由。问题是,似乎首先搜索来自模块化应用程序的路由,然后搜索经典应用程序中的应用程序。我想反过来的行为。我怎样才能实现它?
答案 0 :(得分:4)
Sinatra应用程序可以是used as Rack middleware以及它们自己的应用程序。使用use MyModularApp
您是adding the module into the middleware stack,因此它会在主应用程序之前看到请求;只要您在源文件中使用use
方法,就会发生这种情况。
当充当中间件时,如果当前应用中没有路由匹配,Sinatra应用会将请求转发到堆栈中,因此这就是您看到当前行为的原因。
让它按照您的意愿工作的一种方法是设置一个调用模块化应用程序的自定义not_found
处理程序:
not_found do
MyModularApp.call(env)
end
现在,如果您的主应用程序没有与请求匹配的路由,则会调用模块化应用程序。
答案 1 :(得分:0)
路由按照定义的顺序进行匹配。调用与请求匹配的第一个路由。