我有应用它工作正常.但是现在我们决定把它移到/api路上.所以我绕道而行
my $r = $self->routes;
# Application is always under /api/v1, /api/v2 etc. path
$r = $r->any( '/api/:api', [ api => qr/v\d+/ ] )->detour( 'MyApp' );
$r->get( '/users/me' )->to( 'user#show_me' );
Run Code Online (Sandbox Code Playgroud)
但在此之后没有任何作用.要求site.domain/api/v1使应用程序陷入无限循环.
还有Mojolicious :: Plugin :: Mount,但它只对在指定路径下安装另一个应用程序很有用.
本指南也无法解决问题.
这条线应该是固定的:
# Application is always under /api/v1, /api/v2 etc. path
$r = $r->any( '/api/:api', [ api => qr/v\d+/ ] )->partial( 1 )
Run Code Online (Sandbox Code Playgroud)
更新
如记录:
路线没有特定的结束,剩余的字符将被捕获在路径中.
如果你跑,myapp.pl routes -v你会看到:
/api/:api .D.. * apiapi ^\/api/((?^:v\d+))
+/users/me .... GET usersme ^\/users\/me/?(?:\.([^/]+))?$
Run Code Online (Sandbox Code Playgroud)
当请求到来时,将根据此正则表达式进行检查:
^\/api/((?^:v\d+))\/users\/me/?(?:\.([^/]+))?$
Run Code Online (Sandbox Code Playgroud)
只会/users/me被捕获的地方path