概要
例えば「/」や「/hoge」の定義はあるけど「/fuga」の定義を指定いない場合 Sinatra はデフォルトの 404 エラー画面を出力します
API サーバなどで本来 JSON が返る場合にデフォルトのエラー画面だと HTML が返却されてしまい SDK のクライアント側がクラッシュしたりするケースがあります
そこで該当しないパスにきたときに Sinatra 側でカスタムしたエラー画面を返却する方法を紹介します
環境
- macOS X 10.12.6
- Ruby 2.4.1p111
- gem 2.6.11
- sinatra 1.4.8
セットアップ
- bundle init
- vim Gemfile
gem "sinatra"
gem "thin"
bundle install --path vendor/bundle
アプリ作成
- vim app.rb
require 'sinatra'
get '/' do
'hello'
end
not_found do
'not found'
end
ポイントは not_found という関数を使用している点です
これを定義することになり 404 のイベントが発生した際にこの not_found メソッドがコールされます
動作確認
- bundle exec ruby app.rb
- curl localhost:4567
hello
- curl localhost:4567/hoge
not found
という感じになります
最後に
Sinatra で 404 エラーが発生した時の対応をしてみました
関数を一つ定義するだけなので簡単に対応することができました
もしかすると古い Sinatra にはないかもしれません
0 件のコメント:
コメントを投稿