Mojolicious初学(终章)
一、Websockets
Mojolicious提供了websocket功能,就使用而言算是十分简单的了:
use Mojolicious::Lite -signatures;
websocket '/echo' => sub ($c) { #websocket是启用websocket关键词
$c->on(json => sub ($c, $hash) { #这是一个基于时间的异步监听,$hash代表前端发送来的json数据段。
$hash->{msg} = "echo: $hash->{msg}";
$c->send({json => $hash});
});
};
get '/' => 'index';
app->start;
__DATA__
@@ index.html.ep
<!DOCTYPE html>
<html>
<head>
<title>Echo</title>
<script>
var ws = new WebSocket('<%= url_for('echo')->to_abs %>'); #前端websocket,这需要掌握js语法。
ws.onmessage = function (event) {
document.body.innerHTML += JSON.parse(event.data).msg;
};
ws.onopen = function (event) {
ws.send(JSON.stringify({msg: 'I ♥ Mojolicious!'}));
};
</script>
</head>
</html>
二、mode模式
对于web后端开发来说,无论何种框架都会有开发模式develoment和生产模式production。mojolicious也不例外。在我们启动mojolicious应用时,可以通过-m参数后跟production或development修改模式。mojolicious还有一项便利的log插件,方便我们产生调试日志。
use Mojolicious::Lite -signatures;
# Prepare mode specific message during startup
my $msg = app->mode eq 'development' ? 'Development!' : 'Something else!'; #通过app->mode判断模式。
get '/' => sub ($c) {
$c->app->log->debug('Rendering mode specific message'); #这是log在路由方法中的调用方式。
$c->render(text => $msg);
};
app->log->debug('Starting application'); #这是log在全局模式的调用方式。
app->start;
三、Mojolicious测试
Test::Mojo是mojolicious的测试模块。方便我们开发测试:
use Test::More;
use Mojo::File qw(curfile);
use Test::Mojo;
# Portably point to "../myapp.pl"
my $script = curfile->dirname->sibling('myapp.pl'); #载入mojolicious应用
my $t = Test::Mojo->new($script);
$t->get_ok('/')->status_is(200)->content_like(qr/Funky/); #进行测试。
done_testing();
四、结语
至此,我们的Mojolicious初学部分就讲完了。本篇主要参考的Mojolicious::Guides::Tutorial,官方的初学说明文档。也算是官方文档的结合作者个人理解的翻译。
如果你已经熟练的掌握了我在清新Perl中提到的要点,那么Mojolicious初学也同样会轻松学习。
当然了,作为Web应用,不会数据库,就不算是完整的。下一期开始,我将带领各位学习一下Mojo::MySQL,Mojo的异步mysql数据库模块。


