我有一个经典风格的 Sinatra 应用程序,我正在向它添加一个模块化应用程序use MyModularApp
。
这很好用,当我运行经典应用程序时,经典应用程序和模块化应用程序的路由都可用。问题是,似乎首先搜索来自模块化应用程序的路线,然后才搜索来自经典应用程序的应用程序。我想要相反的行为。我怎样才能实现它?
Sinatra 应用程序可以用作 Rack 中间件以及它们自己的应用程序。随着use MyModularApp
您将模块添加到中间件堆栈中,它会在主应用程序之前看到请求;无论您use
的源文件中有方法,这都会发生。
当充当中间件时,如果当前应用程序中没有匹配的路由,Sinatra 应用程序会将请求向下转发,这就是您看到当前行为的原因。
让它按您的意愿工作的一种方法是设置一个not_found
调用您的模块化应用程序的客户处理程序:
not_found do
MyModularApp.call(env)
end
现在,如果您的主应用程序没有与请求匹配的路由,则将调用模块化应用程序。
根据Sinatra 文档:
路由按照定义的顺序进行匹配。调用与请求匹配的第一个路由。