我想让MyMiddleware在我的Rack应用程序中运行,但只能用于某些路径.我希望使用Rack :: Builder或至少Rack :: URLMap,但我不太清楚如何.
这是我以为会工作,但不是:
# in my rackup file or Rails environment.rb: map '/foo' do use MyMiddleware,{ :some => 'options' } end
或者更好的是,使用Regexp:
map /^foo/ do use MyMiddleware,{ :some => 'options' } end
但地图似乎要求一个应用程序结束;它不会回到刚刚传递控制回到其父母. (实际的错误是“undefined方法”,每个“for nil:NilClass”从Rack尝试将end的结尾转到一个应用程序.)
解决方法
您可以让MyMiddleware检查路径,如果匹配,则不会将控件传递给下一个中间件.
class MyMiddleware def initialize app @app = app end def call env middlewary_stuff if env['PATH_INFO'] == '/foo' @app.call env end def middlewary_stuff #... end end
或者,您可以使用URLMap w / o的dslness.它看起来像这样:
main_app = MainApp.new Rack::URLMap.new '/'=>main_app,/^(foo|bar)/ => MyMiddleWare.new(main_app)
URLMap实际上是pretty simple to grok.
原文地址:https://www.jb51.cc/ruby/273380.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。