Override Sinatra default NotFound error page

后端 未结 3 1274
后悔当初
后悔当初 2021-02-05 20:17

Is there a way to override the sinatra default NotFound error page (\"Sinatra doesnt know this ditty\")? I want sinatra to show only a plain string as \"Method not found\" when

相关标签:
3条回答
  • 2021-02-05 21:02

    If you don't use error handling in your route, you can utilize the built in error route like this (taken and modified from the Sinatra: Up and Running book)

    require 'sinatra'
    
    configure do
      set :show_exceptions, false
    end
    
    get '/div_by_zero' do
      0 / 0
      "You won't see me."
    end
    
    not_found do
      request.path
    end
    
    error do
      "Error is: " + params['captures'].first.inspect
    end
    

    There is a parameter captures that holds your error. You can access it via params['captures']. It is an array, and in my tests it would contain a single element, which was the error itself (not a string).

    Here is information on the request object.

    0 讨论(0)
  • 2021-02-05 21:06

    Perhaps a more graceful solution than that proposed in the accepted answer is to rescue only Sinatra::NotFound, rather than using the error(404) or not_found styles.

    error Sinatra::NotFound do
      content_type 'text/plain'
      [404, 'Not Found']
    end
    

    This prevents the "sinatra doesn't know this ditty" default page for routes that you haven't defined, but doesn't get in the way of explicit return [404, 'Something else']-style responses.

    0 讨论(0)
  • 2021-02-05 21:22

    Nevermind, found that all routes are matched in order, so after all routes I put get/post/put/delete '*' do ; end and that solves my problem.

    0 讨论(0)
提交回复
热议问题