!perl WAF Mojolicious(モジョリシャス)はperl製のWebアプリケーションフレームワークです。2つのウェブサーバが同梱されていてmojoliciousだけセットアップすれはwebを開発、公開できます。1つはmorbo (モーボ)で開発用のサーバーです。起動しっぱなしでも起動後に更新されたモジュールがロードされます。もう1つのhypnotoad (ハイプノトード)はプリフォークサーバーでホットデプロイメントを行うことができます。 *起動 $ morbo script/ → Server available at http://127.0.0.1:3000 - or - $ hypnotoad script/ データベースにSQLiteを使えばサーバーを立てずにお手軽にWebを公開出来ます。 !mojoliciousでJSONをPOSTで送信と受信 * [HTMLファイルからPOSTでJSONデータを送信する|http://qiita.com/kidatti/items/21cc5c5154dbbb1aa27f](http://qiita.com/kidatti/items/21cc5c5154dbbb1aa27f )より [デモ画面|http://www21051ue.sakura.ne.jp:3003/api/json/json]を作ってみた。 [toolmmt/templates/json/json.html.ep] % layout 'default'; % title 'mojplicious JSON DEMO';

mojolicious JSON Demo


JSON

JSON POST

HTMLファイルからPOSTでJSONデータを送信する

URL:

value1:

value2:

[toolmmt/lib/Tool/mmt/Controller/Json.pm] package Tool::mmt::Controller::Json; use Mojo::Base 'Tool::mmt::Controller::Mmt'; sub json_post{ my $s = shift; use Mojo::UserAgent; my $ua = Mojo::UserAgent->new; my $data = $ua->post('http://localhost:3001/api/example/json' => {Accept=> '*/*'} => json => {a => 'b'}); $s->render(json => $data->res->json); } sub json_test01{ my $s = shift; $s->render(json => {head => 'Json Test Data',array=>[1,2,3,4],lang=>['perl','ruby','php'], 日本語=>['漢字','ひらがな','カタカナ']}); } sub json{ my $s = shift; $s->render(json => $s->req->json); } 1; !コントローラーのディレクトリが変わった どのバージョンで変わったか解らないがコントローラーのディレクトリが変わっていた。以前はlib/の下がコントローラだったがlib//Controller下になっていた。両方のバージョンで動かす為にはstartupにてnamespacesを設定する。 $r->namespaces(['Tool::mmt::Controller']); !render()のpartialが効かなくなった! レンダーした結果を出力せず変数に格納したいときにpartial=>1としていたが効かなくなった。 単に"1"が帰ってくる。下記URLで教えてもらった。renderをrender_to_stringに変更すれば大丈夫! - $s->json_or_jsonp( $s->render(json => $perl_object, partial => 1) + $s->json_or_jsonp( $s->render_to_string(json => $perl_object) https://kantaro-cgi.com/blog/mojolicious/not_work_render_partial.html !オプショナルなプレースホルダー *[yuki-kimoto/mojolicious-guides-japanese|https://github.com/yuki-kimoto/mojolicious-guides-japanese/wiki/Mojolicious::Guides::Routing]より ふたつのオプショナルなプレースホルダーが、スラッシュによって分割されている場合だけ、 スラッシュはオプショナルなものになります。 # / -> {controller => 'foo', action => 'bar'} # /users -> {controller => 'users', action => 'bar'} # /users/list -> {controller => 'users', action => 'list'} $r->get('/:controller/:action')->to('foo#bar'); controllerやactionなどの特別なスタッシュの値もまたプレースホルダーとなりえます。これによってきわめて柔軟なルーティングの構築が可能になります。 これは開発の間は特にとても便利ですが、 すべてのコントローラーメソッドがルーティングになる可能性 があるので、注意深く利用すべきです。 アンダースコアで始まるこれらのメソッドと同じように、すべての大文字のメソッドは 自動的にルーターから隠されます。 追加的に隠すためにMojolicious::Routesのhideを使うこともできます。 /:controller/:actionでコントローラとアクション(メソッド)を柔軟に設定できます。 !mojoliciousで作ったアプリ *[アルバム|http://park15.wakwak.com/~k-lovely/cgi-bin/wiki/wiki.cgi?page=photo_album] 【[デモ画面|http://www21051ue.sakura.ne.jp:8080/]】 *[mmt|http://park15.wakwak.com/~k-lovely/cgi-bin/wiki/wiki.cgi?page=mmt++--++Master+Maintenance+Tool+perl+module%2E] 【[デモ画面|http://www21051ue.sakura.ne.jp:3003/mmtx/commodity]】 *[websocketチャット|http://park15.wakwak.com/~k-lovely/cgi-bin/wiki/wiki.cgi?page=perl+memo] 【[デモ画面|http://www21051ue.sakura.ne.jp:3001/]】