覆盖not_found sinatra应用程序

时间:2014-10-27 19:02:06

标签: ruby sinatra

sinatra (= 1.4.5)

我想为特定路线呈现自定义404消息,在这种情况下,文字“未找到”'

class App < Sinatra::Application 

  not_found do
    'You suck'
  end

  get '/404page' do
    halt 404, 'Not found'
  end 
end

我发现无论我做什么,只要响应状态设置为404,就会调用not_found block中的文本,而我真正想要的只是停止的文本。

可能是Override Sinatra default NotFound error page的副本,但我无法找到该消息。

1 个答案:

答案 0 :(得分:0)

你可以将一个正文传递给not_found,所以你的get请求看起来就像这样。

get '/404page' do
  not_found('Not found')
end

这将通过not_found方法调用halt 404, 'Not found'

这通常是你需要的;如果这不符合您的需求,那么您需要考虑覆盖我在下面包含的Sinatra route_missing方法。

# No matching route was found or all routes passed. The default
# implementation is to forward the request downstream when running
# as middleware (@app is non-nil); when no downstream app is set, raise
# a NotFound exception. Subclasses can override this method to perform
# custom route miss logic.
def route_missing
  if @app
    forward
  else
    raise NotFound
  end
end