我有应用它工作正常。但现在我们决定将其移至/api
路径下。所以我使用detour
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' );
但在此之后没有任何作用。请求site.domain/api/v1
导致应用程序陷入无限循环。
还有Mojolicious::Plugin::Mount,但它仅对指定路线下的mount another one application有用。
This指南也无法解决问题。
答案 0 :(得分:6)
这一行应该修正:
# Application is always under /api/v1, /api/v2 etc. path
$r = $r->any( '/api/:api', [ api => qr/v\d+/ ] )->partial( 1 )
<强>更新强>
因为它是documented:
路线没有特定的结束,剩余的字符将被捕获在路径中。
如果您运行myapp.pl routes -v
,您会看到:
/api/:api .D.. * apiapi ^\/api/((?^:v\d+))
+/users/me .... GET usersme ^\/users\/me/?(?:\.([^/]+))?$
当请求到来时,将根据此正则表达式进行检查:
^\/api/((?^:v\d+))\/users\/me/?(?:\.([^/]+))?$
仅在/users/me
path
的位置