我有一个基本的 sinatra 应用程序,可以从目录中呈现文件。如果页面不存在,我想要的是返回 404。目前它引发 500 错误。
get '/:page' do
erb :"pages/#{params[:page]}", layout: :"layouts/application"
end
尝试这个 ;)
# 404 Error!
not_found do
status 404
erb :oops
end
用你喜欢的任何名称为自己创建一个 404 页面(oops.erb
例如,我的名称是 ),这应该可以正常工作。
not_found
是Sinatra 的错误处理助手,用于抓取它返回的错误 500 和 404 未发现。然后,您可以使用它更改 HTTP 状态和相应的视图。查看所有 Sinatra 错误处理程序的文档:它们非常有用!
您可以执行以下操作:
get '/:page' do
requested_erb = File.join(root, 'pages', params[:page])
pass unless File.exists?(requested_erb)
erb :"#{requested_erb}", :layout: :"layouts/application"
end
我没有对此进行测试,所以上面的代码可能存在一些问题,但这是我脑海中的一般想法。