2010-12-04 14 views
12

Sinatra, OPTIONS HTTP fiilini destekliyor mu? Şunlar gibi:Sinatra OPSİYONLARI HTTP Verb

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

    halt 200 
end 

cevap

26

hack biraz bunu kullanarak çalışma başardı sonra:

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

    halt 200 
    end 
end 

Düzenleme: Biraz daha bu konuda etrafa, bir PULL isteği üzerine olduğunu fark sonra

OPTIONS fiil (https://github.com/sinatra/sinatra/pull/129) ilavesi için GitHub. Ben çözümü aldı ve şu pasajı kullanarak bunu kesmek:

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

Şimdi basitçe kullanabilirsiniz:

options '/' do 
    ... 
end 

Düzenleme: çekme isteği birleşti edilmelidir

. Hack'e gerek yok.

+2

bunu okuyor, lütfen [cevap] (http://stackoverflow.com/a/10195704/316700) 'ı kontrol edin, şimdi Sinatra 'options' _method_-out-of-the-box'ı uygular. – fguillen

2

Hayır öyle değil. GitHub koduna bakarsanız, HTTP fiillerinin nerede tanımlandığını görebilir ve options bunlardan biri değildir.

+0

Nasıl ekleyebilirim? –

+2

@KevinSylvestre Mevcut rota fiillerinin Sinatra :: Base'de (Jergason'un verdiği bağlantıya bakınız) sınıf yöntemleri olarak uygulandığı göz önüne alındığında, sadece kendi başınızı tanımlayabilmeniz gerekir: 'def Sinatra :: Base.options (yol , opts = {}, &bk); rotası 'OPTIONS', yol, opts, & bk end '(test edilmedi) – Phrogz

+0

@Phrogz Teşekkürler! Bu snippet bana nasıl yama yapılacağını bulmakta bana yardımcı oldu. Güncellenmiş cevabımı görün –