我正在尝试构建一个使用机架中间件本身(RackWired)的机架中间件GEM。
我有一个现有的应用程序,其config.ru使用Rack :: Builder。在该块(Rack :: Builder)中,我想指定我的中间件,并在调用它时使用自己内部的第三方中间件(rack-cors)来做一些事情。令人困惑,我知道。
问题在于Rack :: Builder的上下文位于config.ru中,因此我的中间件(RackWired)无法访问它以“使用”第三方中间件(rack-cors)。
我努力的目的就在这里
有没有办法在中间件中使用中间件?
谢谢
是的,我不确定您要做什么。但是你可以做到
class CorsWired
def initialize(app)
@app = app
end
def call(env)
cors = Rack::Cors.new(@app, {}) do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :put, :options, :delete], :credentials => false
end
end
cors.call(env)
end
end
您的config.ru应该有,use CorsWired
但是没有use CorsWired.new
这是我想您要问的问题,但我想您缺少中间件的要点。您应该根据自己config.ru
的意愿将中间件之前/之后更改为使用机架式芯子。
require 'rack'
require 'rack/cors'
require './cors_wired'
app = Rack::Builder.new do
use Rack::Cors do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :put, :options, :delete], :credentials => false
end
end
use CorsWired
run lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['OK']] }
end
run app
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句