Arn*_*oss 5 perl mojolicious mojolicious-lite
HypnoToad 发送页面后如何让我的代码执行某些操作?(注:我正在回答我自己的问题。我发布此内容是因为 StackOverflow 向我指出了上一个问题,该问题并未直接解决我的问题,尽管它确实包含了我需要的线索。)
示例代码:
use Mojolicious::Lite;
get "/index" => sub {
my $c = shift;
$c->render("renderThis");
# Do something after rendering
};
app->start('daemon', '-l', 'http://*:8080');
__DATA__
@@ renderThis.html.ep
% layout "template" ;
<h1>Hello World</h1>
@@ layouts/template.html.ep
<!DOCTYPE html>
<html><head></head><body>
%= content
</body></html>
Run Code Online (Sandbox Code Playgroud)
render 似乎缓冲其 http 输出并在代码块完成后发送它。我希望在页面发送后执行一些操作。可以通过将以下内容替换“Do some”注释来观察缓冲。
sleep 15;
say "Wow, that was a long time!";
Run Code Online (Sandbox Code Playgroud)
我用的是win7,所以纯unix的解决方案不起作用。
您可以将代码附加到事务的完成事件中。大多数其他方法不能保证等到响应实际发送为止,因为它以异步方式发生。
use Mojolicious::Lite;
get "/index" => sub {
my $c = shift;
$c->render("renderThis");
$c->tx->on(finish => sub {
sleep 15; # this is a really bad idea, use a timer instead
say "That was a long time, but at least the page got sent quickly.";
});
};
Run Code Online (Sandbox Code Playgroud)