有没有办法覆盖sinatra默认的NotFound错误页面(“Sinatra不知道这个小曲”)?我希望sinatra在找不到正确的路径时只显示一个普通的字符串“Method not found”,但是当我从路径中引发404错误时,我希望它显示传入的错误消息。
像这样实现not_found块:
not_found do
'Method not found.'
end
有效,但它不是一个有效的选项,因为我希望能够从这样的路由中抛出我自己的NotFound错误消息:
get '/' do
begin
# some processing that can raise an exception if resource not found
rescue => e
error 404, e.message.to_json
end
end
但正如预期的那样not_found阻止覆盖我的错误消息。
答案 0 :(得分:15)
或许比the accepted answer中提出的解决方案更优雅的解决方案是仅展开Sinatra::NotFound
,而不是使用error(404)
或not_found
样式。
error Sinatra::NotFound do
content_type 'text/plain'
[404, 'Not Found']
end
这可以防止“sinatra不知道这个小曲”的默认页面用于您尚未定义的路线,但不会妨碍明确的return [404, 'Something else']
- 样式响应。
答案 1 :(得分:5)
如果您没有在路线中使用错误处理,则可以使用内置的error
路线(从Sinatra: Up and Running书中获取和修改)
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
有一个参数captures
可以保存您的错误。您可以通过params['captures']
访问它。它是一个数组,在我的测试中它将包含一个单独的元素,它本身就是错误(不是字符串)。
答案 2 :(得分:0)
没关系,发现所有路线都是按顺序匹配的,所以在我放了get/post/put/delete '*' do ; end
所有路线后,这就解决了我的问题。