2010-12-04 14 views
12

Unterstützt Sinatra das HTTP-Verb OPTIONS? Etwas wie:Sinatra OPTIONEN HTTP Verb

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

    halt 200 
end 

Antwort

26

Nach einem bisschen Hacking ich es arbeitet mit bekommen verwaltet:

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

    halt 200 
    end 
end 

Edit:

Nach etwas mehr umsah zu diesem Thema, ich erkennen, dass eine Pull-Anforderung bis auf ist GitHub für das Hinzufügen des OPTIONS Verbs (https://github.com/sinatra/sinatra/pull/129). Ich habe die Lösung und hackte sie die folgenden Schnipsel in Verwendung:

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

Jetzt kann ich einfach nutzen:

options '/' do 
    ... 
end 

Edit:

Die Pull-Anforderung zusammengeführt werden soll. Keine Notwendigkeit mehr für den Hack.

+2

Wenn Sie Lies dies, bitte überprüfe [meine Antwort] (http://stackoverflow.com/a/10195704/316700), nun implementiert Sinatra die 'options' _method_ out-of-the-box. – fguillen

2

Nein, tut es nicht. Wenn Sie sich den Code auf GitHub ansehen, können Sie sehen, wo die HTTP-Verben definiert sind, und options ist keiner von ihnen.

+0

Wie kann ich es dann hinzufügen? –

+2

@KevinSylvestre Angesichts der Tatsache, dass die existierenden Routenverben als Klassenmethoden auf Sinatra :: Base implementiert sind (siehe den Link, den Jergason gab), sollten Sie nur in der Lage sein, Ihre eigenen zu definieren: 'def Sinatra :: Base.options (Pfad , opts = {}, &bk); route 'OPTIONS', pfad, opts, & bk end' (ungetestet) – Phrogz

+0

@Phrogz Danke! Dieses Schnipsel hat mir geholfen herauszufinden, wie man es patchen kann. Siehe meine aktualisierte Antwort. –