天然パーマです。

Mojoliciousでエラー時に特別な処理をさせる

たまたま、こんな感じのツイートを見かけたので...

Mojoliciousで404、500等のWAFで用意されている標準画面を出さないようにする方法を知りたいのですがどなたか教えて頂く事はできますでしょうか

僕の返答

templates/not_found.html.ep とかにテンプレート置いておくとそれがrenderされるようになりますよー

っていうのが常套手段なんだけど...

ありがとうございます!テンプレートをやっぱり設置しないといけないのですね、静的ページにリダイレクトするか、汎用例外処理みたいなのがあれば良かったんですが、CGIだと仕方ないですね...。

再び返答

あー、hook 使えばできそうっすよー>リダイレクト。でも個人的には404ページ出した方がいい気がします

ってことでhookを使って500番エラーをキャッチする再現出来るコードを書いてみた。Mojolicious::Lite です。

use Mojolicious::Lite;

app->hook(
    after_dispatch => sub {
        my $c = shift;
        if ( $c->res->code =~ /500/ ) {
            $c->render( text => 'hooked!!' );
        }
    }
);

get '/' => sub {
    my $self = shift;
    $self->render( text => 'index' );
};

get '/error' => sub {
    die;
};

app->start;

これで「/error」にアクセスすると「hooked!!」って出る〜!!