2010-12-04 7 views
12

Sinatra가 OPTIONS HTTP 동사를 지원합니까? 예 :Sinatra 옵션 HTTP 동사

options '/' do 
    response.headers["Access-Control-Allow-Origin"] = "*" 
    response.headers["Access-Control-Allow-Methods"] = "POST" 

    halt 200 
end 

답변

26

해킹 조금 나는 그것을 사용하여 작업 얻을 관리 후 :

before do 
    if request.request_method == 'OPTIONS' 
    response.headers["Access-Control-Allow-Origin"] = "*" 
    response.headers["Access-Control-Allow-Methods"] = "POST" 

    halt 200 
    end 
end 

편집 : 일부는 더이 문제에 대한 둘러보고, 나는 PULL 요청이 최대 인 것을 알게되면

OPTIONS 동사 (https://github.com/sinatra/sinatra/pull/129) 추가를위한 GitHub. 나는 해결책을 가져다가 다음 코드를 사용하여 그것을 해킹 :

configure do 
    class << Sinatra::Base 
    def options(path, opts={}, &block) 
     route 'OPTIONS', path, opts, &block 
    end 
    end 
    Sinatra::Delegator.delegate :options 
end 

는 지금은 간단하게 사용할 수 있습니다

options '/' do 
    ... 
end 

편집 : 풀 요청을 병합한다

. 해킹이 더 이상 필요하지 않습니다.

+2

[내 대답] (http://stackoverflow.com/a/10195704/316700)을 확인하십시오. 이제 Sinatra는 'options' _method_ out-of-the-box를 구현합니다. – fguillen

2

아니요. GitHub의 코드를 보면 HTTP 동사가 정의 된 곳을 볼 수 있으며 options은 그 중 하나가 아닙니다.

+0

어떻게 추가 할 수 있습니까? –

+2

@KevinSylvestre Sinatra :: Base (Jergason이 준 링크 참조)에서 기존 경로 동사가 클래스 메소드로 구현되었다고 가정하면 자신 만 정의 할 수 있습니다. def Sinatra :: Base.options (path , opts = {}, &bk); route 'OPTIONS', path, opts, bk end' (테스트되지 않음) – Phrogz

+0

@Phrogz 고마워요! 그 발췌 문장은 패치하는 방법을 알아내는 데 도움이되었습니다. 업데이트 된 답변보기 –

관련 문제