2010-12-04 13 views
12

¿Admite Sinatra el OPTIONS HTTP verb? Algo como:OPCIONES DE Sinatra HTTP Verb

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

    halt 200 
end 

Respuesta

26

Después de un poco de piratería informática que logró conseguir que funcione usando:

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

    halt 200 
    end 
end 

Editar:

Después de un poco más de mirar a su alrededor en este tema, me di cuenta de que una solicitud de tirar hacia arriba está en GitHub para la adición del verbo OPTIONS (https://github.com/sinatra/sinatra/pull/129). Tomé la solución y cortado en usar el siguiente fragmento:

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

Ahora puede simplemente usar:

options '/' do 
    ... 
end 

Editar:

La solicitud de extracción debería fusionarse. No más necesidad del hack.

+2

Si están leyendo esto, por favor revisen [mi respuesta] (http://stackoverflow.com/a/10195704/316700), ahora Sinatra implementa las 'opciones '_method_ out-of-the-box. – fguillen

2

No, no lo hace. Si mira el código en GitHub, puede ver dónde están definidos los verbos HTTP y options no es uno de ellos.

+0

¿Cómo puedo agregarlo? –

+2

@KevinSylvestre Dado que parece que los verbos de ruta existentes se implementan como métodos de clase en Sinatra :: Base (consulte el enlace que proporcionó Jergason), debería poder definir su propio: 'def Sinatra :: Base.options (ruta , opts = {}, &bk); ruta 'OPCIONES', ruta, opts, & bk end' (no probado). – Phrogz

+0

@Phrogz Gracias! Ese fragmento me ayudó a descubrir cómo aplicar el parche. Consulte mi respuesta actualizada. –