如何在Mojolicious中动态添加和删除路由?

时间:2014-03-10 03:19:26

标签: perl mojolicious mojo mojolicious-lite

我正在尝试在我的Mojolicious应用程序中组建一个维护页面,只要服务器上存在文件或数据库条目,我的所有用户都会显示。

我知道我可以在启动时检查这个文件或条目,如果它在我的'catch all'路线中添加。但是我不确定如何动态地这样做?每当我想进行维护时,我都不想重新启动后端。

有没有办法从钩子添加和删除路由?例如,使用before dispatch hook来监视文件/ db条目,如果存在则修改路由?

我尝试了这个但是我似乎无法从钩子函数访问路由,只能在启动函数中访问。

谢谢。

1 个答案:

答案 0 :(得分:6)

路由器是动态的,直到第一个请求被提供,之后,路由器无法更改路由(source)。也就是说,您是否可以一般性地声明该路线,并且只是在该条件存在之前禁止任何访问?

#!/usr/bin/env perl

use Mojolicious::Lite;

any '/' => sub { shift->render( text => 'Hello World' ) };

under sub { 
  unless (-e 'myfile') {
    shift->render_not_found;
    return 0;
  }
  return 1;
};

any '/protected' => sub { shift->render( text => 'I am safe' ) };

app->start;