(미들웨어 포함) 랙 앱 기본적 해시 요청을 설명하고 응답을 설명하는 배열을 반환 접수, call
응답 단지 목적이다.
rackup
파일을 사용하는 경우 Rack은 Rack::Builder
에 설명 된 DSL을 사용합니다. run
method just sets the “base” app :
def run(app)
@run = app
end
use
방법을 저장 한 후 미들웨어 앱에 포함 할 클래스, 최종 응용 프로그램을 구성 할 때 수행 그들이 config.ru
에 표시되는 방법의 역순으로 각각에 대해이 같은 (파일) :
이것은 다소 복잡합니다. 그러나 이것은 일반적인 아이디어입니다. 기존 애플 리케이션이 생성자의 첫 번째 인수로 전달 된 미들웨어 클래스의 새 인스턴스가 만들어지고 결과 객체가 새 응용 프로그램이됩니다. 랙 미들웨어에 대한 (잘 설명되지 않은) "인터페이스"입니다. 초기화 프로그램의 첫 번째 인수는 포장하는 응용 프로그램이고, 나머지는 use
에 전달 된 다른 인수입니다.
DSL에서는 항상 run
또는 map
문이있을 것으로 예상하므로 둘 다를 생략하면 오류가 발생합니다. 미들웨어는 그것의 초기화에 전달 된 인수가없는 처리 할 수 있으며 전체 응용 프로그램처럼 동작합니다 방식으로 작성된 경우
, 당신은 config.ru
에서 응용 프로그램으로 직접 사용할 수 있습니다 :
run SomeMiddleware.new
이것은 Sinatra가 허용하는 허용 범위 인 used as middleware입니다. 그것은 주어진 경우 stores the app in the initializer 그리고 어떤 요청과 일치하지 않는 경로가 도착하면 @app
to decide whether to behave as middleware의 존재를 사용하고에 대한 요청을 전달하거나 최종 응용 프로그램으로 동작하여 발견되지 않은 오류로 처리합니다.
미들웨어에 유연성이없는 경우 예제와 같이 랩핑 할 응용 프로그램을 제공해야합니다. 이 경우 미들웨어가 요청을 올바르게 처리하지 못하고 래핑 된 앱에 오류를 전달하려고 할 때 오류 처리를 위해 앱을 사용하는 것이 유용 할 수 있습니다. 당신이 당신의 config.ru
별도의 use
및 run
문을 사용하지 않도록하려면
, 당신은 단지 run
를 사용하고 미들웨어에 직접 간단한 응용 프로그램을 전달할 수 :이 위에서 설명한 인터페이스를 다음 방법
run SomeMiddleware.new(->(e){
[500, {'Content-type' => 'text/plain'}, ["Error: SomeMiddleware didn't handle request"]]
}
주 미들웨어의 경우 : 초기화 프로그램의 첫 번째 인수는 줄 바꿈 할 앱입니다.
그냥 미들웨어입니까? 유효한 랙 응답 설정 여부에 따라 다릅니다. 코드를 제공 할 수 있습니까? – tompave
미들웨어가 이미 모든 것을 수행하는 경우 사용하지 않고 실행할 수 있습니까? – phoet