我只创建两条路线:
$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/...
路径而不是/...
加载静态文件。的为什么吗
答案 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);
};
您必须置于要保护的惯例之上,这一点非常重要。