我有一个基本的sinatra应用程序,可以从目录中呈现文件。如果页面不存在,我想要的是返回404。目前它引发500错误。
get '/:page' do
erb :"pages/#{params[:page]}", layout: :"layouts/application"
end
答案 0 :(得分:20)
试试这个;)
# 404 Error!
not_found do
status 404
erb :oops
end
使用您喜欢的任何名称制作一个404页面(例如我的oops.erb
),这应该可以正常工作。
not_found
是 Sinatra的错误处理帮助程序,用于获取它返回的错误500和404 not-founds。然后,您可以使用它更改HTTP状态和相应的视图。对于Sinatra的所有错误处理程序来说都是Check out the documentation:它们非常有用!
答案 1 :(得分:1)
您可以执行以下操作:
get '/:page' do
requested_erb = File.join(root, 'pages', params[:page])
pass unless File.exists?(requested_erb)
erb :"#{requested_erb}", :layout: :"layouts/application"
end
我没有对此进行测试,因此上述代码可能存在一些问题,但这是我头脑中的一般想法。