我有一个使用Mojolicious框架的应用程序.我在数据库中有一个表,其中包含错误响应列表以及与之关联的其他详细信息.我已经创建了相应的Result和Resultset来使用DB表.还有一个控制器通过与Resultset交互来获取有关错误的详细信息.
我的想法是在此控制器中调用一个操作,通过查询数据库获取传递给它的错误的详细信息(由另一个控制器传递),添加有关为导致该资源的资源请求的环境的运行时信息.错误,创建响应并返回到调用它的控制器.
我正在努力应对从一个控制器到另一个控制器的呼叫.我如何在Mojolicious中做到这一点?我可以传递控制器对象($self)来实现这一点,但有没有更好的方法来做到这一点,所以我完全将我的错误处理响应与调用控制器分开?
我需要能够在Mojolicious :: Lite应用程序中编写和调用我自己的子例程.但是,这样做的直观方式似乎并不奏效.我通过电子邮件发送了一位比我对此问题有更多Mojolicious经验的同事,他给我发了以下代码:
#!/usr/bin/env perl
use Mojolicious::Lite;
# Documentation browser under "/perldoc"
plugin 'PODRenderer';
get '/' => sub {
my $self = shift;
$self->render('index');
};
sub factorial {
my $n = shift;
return $n ? $n * factorial($n - 1) : 1;
}
app->start;
__DATA__
@@ index.html.ep
% layout 'default';
% title 'Welcome';
Welcome to the Mojolicious real-time web framework!
Five factorial: <%= main::factorial(5) %>
@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
<head><title><%= title %></title></head>
<body><%= content %></body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,它告诉我当我调用一个未定义的子程序时:
未定义的子程序&main :: …
我正在寻找 Mojolicious one liner 来提供静态文件并默认列出目录
我来到这个班轮:
perl -Mojo -E "a->static->paths(['c:\temp']);a->start" daemon
Run Code Online (Sandbox Code Playgroud)
哪个在特定目录上提供静态文件,但默认情况下不列出文件,是否可以将其更改为默认情况下也将文件列为一个班轮?
如何将未找到的用户定义的错误页面和服务器错误页面重定向到用户定义页面Mojolicious lite
我正在编写一些web api,它以JSON格式返回数据.
对于所有传入的URL,如果缓存周期没有到期,我需要从缓存返回一些结果.
这种逻辑对所有URL都是通用的.
题:
如何在Mojolicious :: Lite中为所有传入的URL实现一些通用逻辑?
我试着这样做
any '/:bar' => [bar => qr/.+/] => sub {
# ...
# Return JSON object immediately from cache if it is applicable
# ...
}
Run Code Online (Sandbox Code Playgroud)
但是这会导致非常长的页面加载和
Template "bar.html.ep" not found
Run Code Online (Sandbox Code Playgroud)
在morbo日志中(但是经过很长时间的延迟后,最终会执行"/ target"处理程序).
我是Mojo的完美新手,所以任何帮助都将受到赞赏
谢谢!
我有以下测试脚本,它使用Test :: Mojo.当我使用perl从命令行运行它时,它输出正确.但是,当我通过"prove -v"运行它时,Mojo日志记录会被复制,其中一个不会通过"on message"进行管道传输.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 1;
use Mojolicious::Lite;
use Test::Mojo;
app->log->on(
message => sub {
my ( $log, $level, @lines ) = @_;
note "MojoLog $level: @lines";
}
);
get '/debug/mojo/req_url' => sub {
my $c = shift;
$c->render( text => $c->req->url );
};
subtest 'Mojo - $c->req->url' => sub {
plan tests => 3;
my $t = Test::Mojo->new;
$t->get_ok('/debug/mojo/req_url') #
->status_is(200) #
->content_is('/debug/mojo/req_url');
};
Run Code Online (Sandbox Code Playgroud)
直接运行时的输出:
$ perl dup_logging.t
1..1 …Run Code Online (Sandbox Code Playgroud) 完整的Mojolicious应用程序具有routes将转储应用程序路由的命令:
script/my_app.pl routes
Run Code Online (Sandbox Code Playgroud)
从Lite应用程序的测试脚本中如何做同样的事情?
use Mojo::Base -strict;
use Test::Mojo;
use Test::More;
use Mojolicious::Lite;
... # Routes defined here
my $t = Test::Mojo->new;
$t->dump_all_routes # What should I do here?
Run Code Online (Sandbox Code Playgroud) 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的解决方案不起作用。
我正在开发一个Mojolicious::Lite基于简单的服务器,其中包括一个 websocket 端点。
我想处理一些终止信号以优雅地终止 websocket 连接并避免客户端(java 应用程序)中出现异常。
\n\n我尝试使用 来定义我的信号处理程序,就像我以前使用的服务器一样HTTP::Daemon。\n问题是它们似乎被忽略了。也许是在 Mojolicious 层中重新定义的,我还没有找到任何关于它的参考。
我期待看到我的终止消息,但它没有发生
\n\n[Mon Mar 23 14:01:28 2020] [info] Listening at "http://*:3000"\nServer available at http://127.0.0.1:3000\n^C # <-- i want to see my signal received message here if type Ctrl-c\nRun Code Online (Sandbox Code Playgroud)\n\n当服务器位于终端前台时,我通过输入直接发送,并且我可以SIGINT使用.Ctrl-Ckill <pid>
在以前的一些服务器中,我试图通过处理来做到非常详尽:
\n\nHUP现在使用劫持信号来重新加载配置SIGINTCtrl-CSIGQUITCtrl-\\SIGABRT例如异常库终止SIGTERM外部终止请求 - “友好” kill(遭到残酷的反对kill -9TSTP使用 …我是Mojolicious的新手,我有各种各样的工作,但是我遇到了一个问题,我在下面的一小段代码中重新创建了这个问题.
问题很简单:我无法加载外部CSS和JS文件.让我感到惊讶的是,它给出了404错误,好像它试图将这些静态文件作为路由提供服务一样.没有人似乎有这个问题,所以我显然做了一些事情(或错过了某些事情)愚蠢.
有问题的文件位于./css和./js目录中,相对于perl文件(errorddemo.pl).我已尝试过使用和不使用前导'/',以及我能想到的任何其他变体.
这是代码:
#!/usr/bin/env perl
use Mojolicious::Lite;
get '/' => sub {
my $c = shift;
$c->render('index');
};
app->start;
__DATA__
@@ index.html.ep
<!DOCTYPE html>
<html>
%= stylesheet '/css/bootstrap-3.3.2-dist/css/bootstrap.css'
</head>
<body>
<p>blah
%= javascript '/js/jquery-2.1.3.js'
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我运行morbo errordemo.pl并浏览到:3000时,我得到了这个:
[Sun Jan 25 00:24:04 2015] [debug] GET "/".
[Sun Jan 25 00:24:04 2015] [debug] Routing to a callback.
[Sun Jan 25 00:24:04 2015] [debug] Rendering template "index.html.ep" from DATA section.
[Sun Jan 25 00:24:04 2015] [debug] 200 OK (0.005127s, …Run Code Online (Sandbox Code Playgroud)