2010-12-04 35 views
12

Est-ce que Sinatra supporte le verbe HTTP OPTIONS? Quelque chose comme:Sinatra OPTIONS HTTP Verbe

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

    halt 200 
end 

Répondre

26

Après un peu de piratage j'ai réussi à le faire fonctionner à l'aide:

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:

Après un peu plus regardant autour de cette question, je réalise qu'une demande de PULL est sur GitHub pour l'ajout du verbe OPTIONS (https://github.com/sinatra/sinatra/pull/129). Je pris la solution et piraté en utilisant l'extrait suivant:

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

Maintenant, je peux simplement utiliser:

options '/' do 
    ... 
end 

Edit:

La demande de traction doit être fusionnée. Plus besoin de pirater.

+2

Si vous lisez ceci, s'il vous plaît vérifier [ma réponse] (http://stackoverflow.com/a/10195704/316700), maintenant Sinatra implémente le 'options' _method_ out-of-the-box. – fguillen

2

Non, ce n'est pas le cas. Si vous regardez le code sur GitHub vous pouvez voir où les verbes HTTP sont définis, et options n'en fait pas partie.

+0

Comment puis-je l'ajouter alors? –

+2

@KevinSylvestre Etant donné qu'il semble que les verbes de route existants sont implémentés en tant que méthodes de classe sur Sinatra :: Base (voir le lien fourni par Jergason), vous devriez juste pouvoir définir votre propre: 'def Sinatra :: Base.options (chemin , opts = {}, &bk); route 'OPTIONS', chemin, opts, & bk end' (non testé) – Phrogz

+0

@Phrogz Merci, cet extrait m'a aidé à trouver comment patcher. Voir ma mise à jour –