12

我有一个基本的 sinatra 应用程序,可以从目录中呈现文件。如果页面不存在,我想要的是返回 404。目前它引发 500 错误。

get '/:page' do
  erb :"pages/#{params[:page]}", layout: :"layouts/application"
end
4

2 回答 2

25

尝试这个 ;)

# 404 Error!
not_found do
  status 404
  erb :oops
end

用你喜欢的任何名称为自己创建一个 404 页面(oops.erb例如,我的名称是 ),这应该可以正常工作。

not_foundSinatra 的错误处理助手,用于抓取它返回的错误 500 和 404 未发现。然后,您可以使用它更改 HTTP 状态和相应的视图。查看所有 Sinatra 错误处理程序的文档:它们非常有用!

于 2013-11-05T21:13:03.113 回答
2

您可以执行以下操作:

get '/:page' do
  requested_erb = File.join(root, 'pages', params[:page])

  pass unless File.exists?(requested_erb)

  erb :"#{requested_erb}", :layout: :"layouts/application"
end

我没有对此进行测试,所以上面的代码可能存在一些问题,但这是我脑海中的一般想法。

于 2013-11-05T02:51:09.400 回答