【问题标题】:How can I give Sinatra a catchall, default route?我怎样才能给 Sinatra 一个包罗万象的默认路由?
【发布时间】:2012-05-29 20:13:45
【问题描述】:

对于小型开发人员文档应用程序,我想设置一个 Sinatra 应用程序来仅提供 HAML 文件。在 CSS 文件和图像的路由之后,我想要一个尝试为您请求的任何路径加载 HAML 文件的路由。

例如:

  • /index 加载 views/index.haml(如果存在)
  • /this/page/might/exist 加载 views/this/page/might/exist.haml(如果存在)

如何指定这条路线?

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    看起来这样就可以了:

    get '/*' do
      viewname = params[:splat].first   # eg "some/path/here"
    
      if File.exist?("views/#{viewname}.haml")
        haml :"#{viewname}"
    
      else
        "Nopers, I can't find it."
      end
    end
    

    【讨论】:

    • 我必须把它放在我所有其他路由之后,以确保它们得到处理,否则包罗万象的路由 /* 会阻塞所有其他路由
    • @nroose - Web 服务器会返回 500 错误;它不能在 Ruby 中发生。如果,例如,haml 调用引发错误,你是对的,我不会拯救它,我的网站会返回 500。另外,更正确的是,我应该在标题中发送 404 状态代码发送正文“我找不到它”。但这只是一个简单的例子。
    • 只是想指出这确实覆盖/(根路由)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2011-04-02
    • 2011-10-13
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多