web-dev-qa-db-fra.com

Comment soulever un code d'erreur personnalisé à Sinatra?

J'ai fait ce qui suit dans mon application 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

Si je visite /error J'ai un 500 - Internal Server Error Code de réponse, qui est Dieu et voulait. Mais comment puis-je changer le code, par exemple 404 ou 501?

la réponse :

disable :show_exceptions
disable :raise_errors

get '/error' do
  halt(404,haml(:error, :locals => {:error_message => request.env['sinatra.error'].to_s}))
end
27
le_me

Quelque chose comme raise 404 soulève une erreur comme raise ZeroDivisionError Serait, qui provoque une erreur de votre application de 500 serveur interne. Le moyen le plus simple de renvoyer une erreur spécifique consiste à utiliser status

get '/raise404' do
    status 404
end

Vous pouvez également ajouter un corps de réponse personnalisé avec body

get '/raise403' do
    status 403
    body 'This is a 403 error'
end
23
Sean Redmond

J'utilise ceci en bloc

[.____] si "condition" alors 
 faire quelque chose 
 [.____] 
 Halt 500, "Message d'erreur" [.____] # seulement sans erreur [.____] erb: my_template [.____]

En cas d'erreur, mon journal est comme ça
[.____] http/1.1 "500 13 0,1000

5
germanlinux

À la place de raise "ERROR!!", essayez juste de faire error 404 ou error 501 Avec le message d'état optionnel après le code d'état.

Mise à jour: si vous définissez votre gestionnaire d'erreur comme error 400..501 do... Par exemple, vous pouvez utiliser error 501 "ERROR!!" dans ton "/error" route. Cela mettra également votre "erreur !!" message en env['sinatra.error'].message.

2
jboursiquot