2013-06-20 80 views
1

我試圖很好地處理使用Sinatra的錯誤。例如,說我有這樣一個塊:如何在Sinatra中使用HTTP錯誤代碼輸出錯誤消息?

get '/auth/' do 
    ... 
    begin 
     access_token_obj = OAuth2::AccessToken.new(client, token) 
    rescue OAuth2::Error => e 
     return 403, e.description 
    rescue 
     return 403, "Something went wrong" 
    end 
    ... 
end 

我想顯示一個很好的錯誤頁面給用戶。該西納特拉文檔建議我可以這樣做:

error 403 do 
    "Access forbidden" 
end 

但我怎麼得到錯誤信息(「出事了」或e.description)顯示給用戶?在我的error 403 do區塊中沒有可用的env['sinatra.error']。我顯然錯過了一些東西(我對ruby有點新鮮)。

回答

2

查看body變量,您將在第一個索引中出現錯誤消息,因此在body[0]中。

+0

在'錯誤403做'?在那裏,'body'對我來說是一個空陣列。 –

+0

奇怪的是,我可以在6行腳本中找到它。只要在'error 403 do'內返回'inspect'而不是''Access forbidden'',看看你是否能在任何地方找到你的錯誤信息。 –

+0

啊......如果我用'return 403,e'替換'return 403,e.description',那麼我會在'body'中得到一個'OAuth2 :: Error'對象。但我無法弄清楚如何從中獲取錯誤信息。 –