【问题标题】:How do I output error messages with HTTP error codes in Sinatra?如何在 Sinatra 中输出带有 HTTP 错误代码的错误消息?
【发布时间】:2013-06-20 23:40:24
【问题描述】:

我正在尝试使用 Sinatra 很好地处理错误。例如,假设我有一个这样的块:

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

我想向用户显示一个漂亮的错误页面。 Sinatra 文档建议我可以执行以下操作:

error 403 do
    "Access forbidden"
end

但是如何让错误消息(“出现问题”或e.description)显示给用户?在我的 error 403 do 块中,没有可用的 env['sinatra.error']。我显然错过了一些东西(我对 ruby​​ 有点陌生)。

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    查看body 变量,您将在第一个索引中看到错误消息,因此在body[0] 中。

    【讨论】:

    • error 403 do 内?在那里,body 对我来说是一个空数组。
    • 奇怪,我可以在 6 行脚本中找到它。只需在error 403 do 中返回inspect 而不是"Access forbidden",看看是否可以在任何地方找到错误消息。
    • 啊...如果我用return 403, e 替换return 403, e.description,那么我在body 中得到一个OAuth2::Error 对象。但我不知道如何从中获取错误消息。
    • 如果我这样做 body.inspect 我得到这个:` #<:error:>[{"domain"=>"global", "reason"=>"authError ", "message"=>"Invalid Credentials", "locationType"=>"header", "location"=>"Authorization"}], "code"=>401, "message"=>"Invalid Credentials"}: {"error":{"errors":[{"domain":"global","re​​ason":"authError","message":"Invalid Credentials","locationType":"header","location":" Authorization"}],"code":401,"message":"Invalid Credentials"}}>`
    • 好吧,我有点困惑。我想我只需将e.description 替换为"My error message",我确实可以摆脱body[0]。所以感谢托马斯的指点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多