2

我有一个经典风格的 Sinatra 应用程序,我正在向它添加一个模块化应用程序use MyModularApp

这很好用,当我运行经典应用程序时,经典应用程序和模块化应用程序的路由都可用。问题是,似乎首先搜索来自模块化应用程序的路线,然后才搜索来自经典应用程序的应用程序。我想要相反的行为。我怎样才能实现它?

4

2 回答 2

4

Sinatra 应用程序可以用作 Rack 中间件以及它们自己的应用程序。随着use MyModularApp将模块添加到中间件堆栈中,它会在主应用程序之前看到请求;无论您use的源文件中有方法,这都会发生。

当充当中间件时,如果当前应用程序中没有匹配的路由,Sinatra 应用程序会将请求向下转发,这就是您看到当前行为的原因。

让它按您的意愿工作的一种方法是设置一个not_found调用您的模块化应用程序的客户处理程序:

not_found do
  MyModularApp.call(env)
end

现在,如果您的主应用程序没有与请求匹配的路由,则将调用模块化应用程序。

于 2013-02-15T04:05:19.700 回答
0

根据Sinatra 文档

路由按照定义的顺序进行匹配。调用与请求匹配的第一个路由。

于 2013-02-15T02:33:43.257 回答