2015-09-17 36 views
0

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

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停止执行,并返回真难看的错误信息确认页面上的错误消息。我该怎么做呢?

回答

5

你应该定义一个error块:

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

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

相关问题