【问题标题】:How to run Mojolicious appication under '/api' path( How to ignore some prefix in path )?如何在“/api”路径下运行 Mojolicious 应用程序(如何忽略路径中的某些前缀)?
【发布时间】:2017-01-08 03:08:32
【问题描述】:

我有应用程序,它工作正常。但现在我们决定将其移动到/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指南也没有解决问题。

【问题讨论】:

    标签: perl mojolicious


    【解决方案1】:

    这条线应该是固定的:

    # 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/?(?:\.([^/]+))?$
    

    path 中只会捕获/users/me

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2017-05-18
      • 2011-08-06
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      相关资源
      最近更新 更多