【问题标题】:How to gracefully handle exceptions in a Sinatra API如何优雅地处理 Sinatra API 中的异常
【发布时间】:2015-12-14 22:46:32
【问题描述】:

我正在尝试在 Sinatra 中编写一个接受临时 CSV 文件作为参数的 API。如果文件类型不是 text/csv 或者 csv 没有电子邮件列,我想引发异常,并且我希望确认页面仅显示错误消息。我想象它看起来像这样:

if params[:recipients_file]
  raise ArgumentError, 'Invalid file. Make sure it is of type text/csv.' unless params[:recipients_file][:type] == "text/csv"
  recipients_csv = CSV.parse(params[:recipients_file][:tempfile].read, {headers: true})
  raise ArgumentError, 'Invalid CSV. Make sure it has an "email" column' unless recipients_csv.headers.include?('email')
  recipients += recipients_csv.map {|recipient| recipient["email"]}
end

但是,只要不满足其中一个条件,我就会收到非常难看的错误消息,例如 NoMethodErrors 等。我只想让 API 停止执行并在确认页面上返回错误消息。我该怎么做?

【问题讨论】:

    标签: ruby api exception exception-handling sinatra


    【解决方案1】:

    您应该定义一个error 块:

    error do
      env['sinatra.error'].message
    end
    

    更多详情请参见http://www.sinatrarb.com/intro.html#Error,包括如何为不同的异常类型、HTTP 状态码等设置不同的错误处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2017-03-04
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多