在Mojolicious的两条路线有什么区别?

时间:2017-01-05 13:45:10

标签: perl mojolicious

我只创建两条路线:

$r->any  ( '/api/v:api', [ api => qr/\d+/ ], { api => 1 } )->partial( 1 );
$r->under( '/api/v:api', [ api => qr/\d+/ ], { api => 1 } );

看起来两者都是一样的。

他们之间有什么区别?

UPD
我注意到,对于第一种情况(->any),静态文件的链接被移动到/api/v1。当异常发生时,这是显而易见的。 mojo/debug模板尝试从/api/v1/...路径而不是/...加载静态文件。的为什么吗

1 个答案:

答案 0 :(得分:-1)

先调用under。您可以在其中放置身份验证代码。

use strict;
use warnings;
use Mojolicious::Lite;

under sub {
    my $self = shift;
    my $api_key = $self->req->url->to_abs->username;
    my $api_secret = $self->req->url->to_abs->password;

    if($api_key ne "Admin" && $api_secret ne "Password123") {
        $self->res->headers->www_authenticate('Basic');
        $self->render(text => 'Error: API-Credentials are wrong', status => 401);
        # No routes will be executed
        return undef;
    }

    # Authentication with success, execute other routes
    return 1;
}

# Only executed if the url is http://Admin:Password123@127.0.0.1:3000
any '/' => sub  { 
    my $self = shift; 
    my $date = Mojo::Date->new; 
    $self->render(text => $date, status => 200);
}; 

您必须置于要保护的惯例之上,这一点非常重要。