【发布时间】:2013-11-15 20:36:08
【问题描述】:
我有一个基本的 sinatra 应用程序,它可以从目录中呈现文件。如果页面不存在,我想要的是返回 404。目前它引发 500 错误。
get '/:page' do
erb :"pages/#{params[:page]}", layout: :"layouts/application"
end
【问题讨论】:
我有一个基本的 sinatra 应用程序,它可以从目录中呈现文件。如果页面不存在,我想要的是返回 404。目前它引发 500 错误。
get '/:page' do
erb :"pages/#{params[:page]}", layout: :"layouts/application"
end
【问题讨论】:
你可以这样做:
get '/:page' do
requested_erb = File.join(root, 'pages', params[:page])
pass unless File.exists?(requested_erb)
erb :"#{requested_erb}", :layout: :"layouts/application"
end
我没有对此进行测试,所以上面的代码可能存在一些问题,但这是我脑海中的一般想法。
【讨论】:
requested_erb = File.join(root, 'pages', params[:page]) 返回的内容 - 这可能不是 100% 正确的。
试试这个;)
# 404 Error!
not_found do
status 404
erb :oops
end
用你喜欢的任何名称为自己创建一个 404 页面(例如,我的是 oops.erb),这应该可以正常工作。
not_found 是 Sinatra 的 错误处理助手,用于抓取它返回的错误 500 和 404 未发现。然后,您可以使用它更改 HTTP 状态和相应的视图。 Check out the documentation 对于 Sinatra 的所有错误处理程序:它们非常有用!
【讨论】:
halt(404),not_found 将被自动调用(你甚至不需要指定 status 指令)。
not_found 仅捕获 404。 500s 甚至 4xx 类中的其他错误都不会调用它。