Perl mojolicous'under'的效果如何?
发件人: 仅当回调返回真值时,才会计算以下所有路由 下面的Perl mojolicous'under'的效果如何?,perl,mojolicious,Perl,Mojolicious,发件人: 仅当回调返回真值时,才会计算以下所有路由 下面的是什么意思 仅在此路径下的路径组 在代码后面声明的路线,在此之后的下 我也不明白下一个场景会发生什么: perl -Mojo -E ' app->routes->under("/", sub{ warn "R1"; return undef })->get("/r1" => {text => "r1" }); app-&
是什么意思
仅在此路径下的路径组
在代码后面声明的路线,在此之后的下
我也不明白下一个场景会发生什么:
perl -Mojo -E '
app->routes->under("/", sub{ warn "R1"; return undef })->get("/r1" => {text => "r1" });
app->routes->under("/", sub{ warn "R2"; return undef })->get("/r2" => {text => "r2" });
app->start;
'
get /r2
这里没有匹配项,所以我应该得到404
,就像在下一个应用程序中一样:
perl -Mojo -E 'app->start;' get /r2
你在这里没有匹配的假设是不正确的。您有/r2
的路由。与该路由相关联的回调形成一个链,在该链中,每个回调可以通过返回true来呈现响应或将责任传递给链中的下一个回调。
如果从启用日志记录的应用程序(默认情况下为logfilelog/development.log
)运行该代码,您将看到
[timestamp][6389][debug][Ere90x2U]未呈现任何内容,预期响应延迟
指示回调返回时没有呈现任何内容
通常,您在
下的回调将用于排除一些常见行为,如检查访问权限(请参阅)。
在本例中,回调会在必要时重定向到登录页面,或返回true以将控制权传递给链中的下一个回调:
my $logged_in = $r->under(sub ($c) {
return 1 if $c->session('user');
$c->redirect_to('index');
return undef;
});
$logged_in->get('/protected');
实际上,这里对/protected
的回调是隐式的,相应的模板protected.html.ep
将被呈现。我不太理解您的问题。第一个示例仅(正确地)警告两个路由,但不返回小写内容。这是因为回调需要返回一个真值。去掉return undef
,改为执行1
,以查看警告和文本。@simbabque:第一个示例是命令永远不会返回(这是一个问题)。我返回undef
,因为它们仅限于身份验证用户。比如@simbabque:所以两条路线都是受限的,没有匹配的。我应该得到404或一些错误吗?你可能应该重定向到一个登录页面。或呈现一些消息,-无论如何,返回undef不会呈现任何内容。这很有帮助。但对于单线应用程序,不会创建日志,也不会显示调试消息是的,没错。@EugenKonkov单线应用程序的用例是什么?当然,如果你想要更复杂的行为,比如分解出那样的行为,你会投入比一行长得多的资金。@simbabque:它们是用来学习下的是如何工作的