我在sinatra app中做了以下事情:
disable :show_exceptions
disable :raise_errors
error do
haml :error, :locals => {:error_message => request.env['sinatra.error'].to_s}
end
get '/error' do
raise "ERROR!!"
end
如果我访问/error
,我会收到一个500 - Internal Server Error
响应代码,这是上帝和想要的。但是如何将代码更改为例如404或501?
答案:
disable :show_exceptions
disable :raise_errors
get '/error' do
halt(404,haml(:error, :locals => {:error_message => request.env['sinatra.error'].to_s}))
end
答案 0 :(得分:22)
raise 404
之类的内容会像raise ZeroDivisionError
那样引发错误,这会导致您的应用抛出500内部服务器错误。返回特定错误的最简单方法是使用status
get '/raise404' do
status 404
end
您还可以使用body
get '/raise403' do
status 403
body 'This is a 403 error'
end
答案 1 :(得分:4)
我在块
中使用它if 'condition' then do something else halt 500 , "error message" end #only without error erb :my_template
如果出现错误,我的日志就像这样 HTTP / 1.1" 500 13 0.1000
答案 2 :(得分:2)
而不是raise "ERROR!!"
,只需在状态代码后使用可选状态消息执行error 404
或error 501
。
更新:
如果将错误处理程序定义为
例如error 400..501 do...
,您可以在error 501 "ERROR!!"
路线中使用"/error"
。这也会让你的“错误!!” env['sinatra.error'].message
中的消息。