我有一个基本的Sinatra应用程序,它从目录中呈现文件。我想要的是如果页面不存在,则返回404。目前它会引发500错误。
get '/:page' do
erb :"pages/#{params[:page]}", layout: :"layouts/application"
end
试一下这个 ;)
# 404 Error!
not_found do
status 404
erb :oops
end
你可以使用任意想要的名称(例如我的是oops.erb
)来制作自己的404页面,这应该能正常工作。
not_found
是Sinatra的错误处理助手,用于捕获返回的500s和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
requested_erb = File.join(root, 'pages', params[:page])
返回的内容 - 这可能不是100%正确的。 - CDub
halt
。 - Jordan Thornquesthalt(404)
,not_found
函数将会自动被调用(而且你甚至都不需要指定status
指令)。 - Alessandronot_found
只能捕获404错误。它不会被调用来处理500或甚至4xx类中的其他错误。 - Alessandro