我正在尝试在我的Mojolicious应用程序中组建一个维护页面,只要服务器上存在文件或数据库条目,我的所有用户都会显示。
我知道我可以在启动时检查这个文件或条目,如果它在我的'catch all'路线中添加。但是我不确定如何动态地这样做?每当我想进行维护时,我都不想重新启动后端。
有没有办法从钩子添加和删除路由?例如,使用before dispatch hook来监视文件/ db条目,如果存在则修改路由?
我尝试了这个但是我似乎无法从钩子函数访问路由,只能在启动函数中访问。
谢谢。
答案 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;