簡體   English   中英

機架中間件中的機架中間件?

[英]Rack Middleware in Rack Middleware?

我正在嘗試構建一個使用機架中間件本身(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 ,即可在中間件之前/之后使用rack-cors,這取決於您要執行的操作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM