gpt4 book ai didi

ruby - 我如何只对某些路径使用 Rack 中间件?

转载 作者:数据小太阳 更新时间:2023-10-29 06:34:37 24 4
gpt4 key购买 nike

我想让 MyMiddleware 在我的 Rack 应用程序中运行,但仅限于某些路径。我希望使用 Rack::Builder 或至少使用 Rack::URLMap,但我不太清楚如何使用。

这是我认为行得通的方法,但行不通:

# in my rackup file or Rails environment.rb:
map '/foo' do
use MyMiddleware, { :some => 'options' }
end

或者,更好的是,使用正则表达式:

map /^foo/ do
use MyMiddleware, { :some => 'options' }
end

但是 map 似乎最后需要一个应用程序;它不会仅仅将控制权交还给它的 parent 。 (实际错误是“undefined method 'each' for nil:NilClass”,从 Rack 试图将 do...end block 的末尾变成 应用。)

是否有一个中间件接受一组中间件和一个路径,并且只在路径匹配时运行它们?

最佳答案

您可以让 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

或者,您可以使用不带 dslness 的 URLMap。它看起来像这样:

main_app = MainApp.new
Rack::URLMap.new '/'=>main_app, /^(foo|bar)/ => MyMiddleWare.new(main_app)

URLMap其实就是pretty simple to grok .

关于ruby - 我如何只对某些路径使用 Rack 中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/920719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com