【问题标题】:how to match regex route in Sinatra?如何匹配 Sinatra 中的正则表达式路由?
【发布时间】:2012-09-11 18:34:13
【问题描述】:

我正在尝试使 sinatra 教程中的这段代码 sn-p 工作,以便我可以根据正则表达式匹配设置一些路由。它似乎不起作用,我直接从教程中复制粘贴,任何关于我所缺少的想法。假设我的 sinatra 应用程序正在运行,并且我还有其他结构正确的 GET 路由正在运行,所以我不清楚为什么像这样的直接复制过去不起作用。

get %r{/hello/([\w]+)} do
    "Hello, #{params[:captures].first}!"
end

应该正确映射http://0.0.0.0:4567/hello 的路由,但路由到“sinatra 不知道这个小曲子”错误消息。

谢谢。

【问题讨论】:

  • 快速问题是在复制并粘贴代码后重新启动 Web 服务器。或者使用像shutgun 这样的 gem,在请求后重新加载网页
  • 我通常会重新启动网络服务器,这很烦人,我会加载shutgun看看它是否有效,谢谢。

标签: ruby sinatra


【解决方案1】:

%r{/hello/([\w]+)} 根本不匹配 /hello。您的正则表达式需要一个斜杠和另一个字符串,但您的路径不包含它。

该路由将匹配/hello/there,但不匹配/hello,甚至不匹配/hello/

鉴于您正在查看捕获,您可能根本不希望它与 /hello 一起使用,因为该捕获将是 nil 并且谁想向 nil 打个招呼?

【讨论】:

  • 谢谢,有趣的是我正在尝试使用 rubular,难道我不能期望 %r{/./} 会...结束路由匹配根目录上的任何内容吗?我无法做到这一点。重新捕获 nil,是的,这是正确的,但我不太关心运行的代码,而更关心正则表达式匹配路由的能力,即我想匹配一些路由,然后基本上正则表达式匹配各种其他东西对于一些获取请求,这对我来说纯粹是教育性的,感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 2015-04-29
  • 1970-01-01
相关资源
最近更新 更多