27

我在我的 sinatra 应用程序中执行了以下操作:

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
4

3 回答 3

25

就像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
于 2012-11-29T04:12:48.047 回答
6

我在块中使用它

如果'条件'然后
   做一点事
别的
   停止 500 ,“错误消息”
结尾
#只有没有错误
erb :my_template

如果出现错误,我的日志就像这样
HTTP/1.1" 500 13 0.1000

于 2014-05-10T14:01:52.313 回答
2

而不是raise "ERROR!!",尝试在状态码之后只做error 404error 501使用可选的状态消息。

更新:例如,如果您定义错误处理程序 error 400..501 do...,则可以error 501 "ERROR!!"在您的"/error"路线中使用。这也会把你的“错误!!” 中的消息 env['sinatra.error'].message

于 2012-11-27T17:27:06.930 回答