【发布时间】:2014-12-01 18:10:30
【问题描述】:
当服务器上出现错误(例如 IOError 或 ArgumentError)时,我正在尝试让我的 sinatra 应用程序显示自定义错误页面。
目前我正在使用 AJAX 将结果加载到某个 #results div 中,但是如果服务器上出现错误,我希望在新页面上打开一个错误页面。
目前,IOError 显示在服务器上,并且在控制台中看到错误(服务器响应状态为 500(内部服务器错误))。除此之外,什么都没有发生。
我认为我必须使用 Javascript(以及 Sinatra::Base 类),但我已经度过了整个昨天和今天早上的时间。
如果有任何帮助,我将不胜感激。我创建了一个过于简化的应用程序版本,如下所示...
Sinatra_app.rb
require 'sinatra/base'
require9 'sinatra'
require 'slim'
# A helper module
module GVhelpers
def create_results(name)
# raise IOError, "There's a problem..."
return "<p>The Server Says 'Hey #{name}'</p>"
end
end
class GVapp < Sinatra::Base
helpers GVhelpers
set :root, File.dirname(__FILE__)
error do
@error = env['sinatra.error']
slim :"500", :locals => {:error => error}
end
get '/' do
slim :index
end
post '/form' do
name = params[:personName]
create_results(name)
end
end
GVapp.run!
index.slim(在视图文件夹中)
script src="/jquery.min.js"
script src="/Gvapp.js"
form#sayHey action="/form" method="post"
| Name:
input type="text" name="personName"
br
input type="submit"
#output
500.slim(在视图文件夹中)
h1 Oops! Something went Wonky!
p Apologies, there was an error with your request:
strong request.env['sinatra.error'].message
p If the error persists, please contact the administrator.
Gvapp.js(在公共文件夹中)
$(document).ready(function() {
$('#sayHey').submit(function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/form',
data: $('#sayHey').serialize(),
success: function(response){
$('#output').html(response);
}
})
})
})
【问题讨论】: