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数据库模块。