Mojoliciousで書いてみる

Created by @techno_neko

## 自己紹介 - 仕事: 組み込み系 - Twitter: @techno_neko - 所属: Hokkaido.pm
## 今日お話すること - ひな形からスクリプトの生成 - ルーターの説明 - パラメーターの引き渡し - テンプレートの書き換え - Mojoliciousで配信
## ひな形からスクリプトの生成 ```Bash $ mojo generate lite_app my_gmap.pl ```
## ルーターの説明 - 最初はこれだけ存在しない ```Perl get '/' => sub { # この部分 my $self = shift; $self->render('index'); }; ``` - リファレンスはここ http://mojolicio.us/perldoc/Mojolicious/Guides/Routing
## ルーターの説明 - "index.html"アクセスされた場合は? ```Perl get '/index.html' => sub { my $self = shift; $self->render('index'); }; ``` - これ、うまくいかないんだけど・・・ ```Perl get qr!/index\.html! => sub { my $self = shift; $self->render('index'); }; ``` - HELP!!!
## パラメーターの引き渡し - これをテンプレートに流し込む ```Perl get '/' => sub { my $self = shift; my $bar = 'bar'; $self->stash( foo => 'foo' ); # この部分 $self->stash( bar => $bar ); # この部分 $self->render('index'); }; ```
## テンプレートの書き換え - テンプレートはこの部分 ```Perl @@ index.html.ep % layout 'default'; % title 'Welcome'; Welcome to the Mojolicious real-time web framework! @@ layouts/default.html.ep <!DOCTYPE html> <html> <head><title><%= title %></title></head> <body><%= content %></body> </html> ```
## テンプレートの書き換え - レイアウトは使わないよ! ```Perl @@ index.html.ep % title 'Welcome'; <!DOCTYPE html> <html> <head><title><%= title %></title></head> <body>Welcome to the Mojolicious real-time web framework!</body> </html> ```
## テンプレートの書き換え ```Perl @@ index.html.ep % title 'Welcome'; <!DOCTYPE html> <html> <head><title><%= title %></title></head> <body>foo: <%= $foo %>, bar:<%= $bar %></body> </html> ```
## Mojoliciousで配信 - デバッグ用(Win32だとダメ) ```Bash $ morbo my_gmap.pl ```
## Mojoliciousで配信 - Win32でもOK(のはず・・・) ```Bash $ perl my_gmap.pl daemon ```
## おまけ - HTMLエスケープされちゃう - <%= $foo %> - そのまま出力される - <%== $foo %>
## 追記 - XSS対策 - JSONをテンプレートで埋め込むのは危ない! - JSONを返すAPIを作ろう - HTMLのscriptタグ内に出力されるJavaScriptのエスケープ処理に起因するXSSがとても多い件について - http://subtech.g.hatena.ne.jp/mala/20100222/1266843093 - XSSを回避しつつ、テンプレートからJavaScriptにJSONで値を渡す方法 - http://blog.nomadscafe.jp/2010/11/xssjavascriptjson.html

ご静聴ありがとうございました