如何在'/ api'路径下运行Mojolicious appication(如何忽略路径中的一些前缀)?

Eug*_*kov 1 perl mojolicious

我有应用它工作正常.但是现在我们决定把它移到/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,但它只对在指定路径下安装另一个应用程序很有用.

指南也无法解决问题.

Eug*_*kov 6

这条线应该是固定的:

# 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