what tutorial rackup apps ruby rack

tutorial - ruby rack web server



Cómo leer datos POST en solicitud de rack (3)

Cuando ejecuto el comando curl

curl -v -H "Content-type: application/json" -X POST -d ''{"name":"abc", "id":"12", "subject":"my subject"}'' http://localhost:9292

para enviar una solicitud POST con datos a mi aplicación de Rack, mi código imprime {} . Eso viene de puts req.POST() en el siguiente código.

¿Por qué imprime {} lugar de los datos POST? ¿Y cómo accedo correctamente a los datos de POST en mi aplicación de Rack?

require ''json'' class Greeter def call(env) req = Rack::Request.new(env) if req.post? puts req.POST() end [200, {"Content-Type" => "application/json"}, [{x:"Hello World!"}.to_json]] end end run Greeter.new


Desde la lectura de los documentos para POST, parece que le está dando datos analizados basados ​​en otros tipos de contenido. Si desea procesar "application / json", probablemente necesite

JSON.parse( req.body.read )

en lugar. Para comprobar esto, intente

puts req.body.read

donde actualmente tienes puts req.POST .

req.body es un objeto de E / S, no una cadena. Ver la documentación del body y ver la fuente. Puedes ver que esto es, de hecho, lo mismo que la respuesta de mudasobwa.

Tenga en cuenta que otros códigos en una aplicación de Rack pueden esperar leer la misma E / S, como los analizadores de parámetros en Sinatra o Rails. Para asegurarse de que vean los mismos datos y no reciban un error, puede llamar a req.body.rewind , posiblemente antes y después de leer el cuerpo de la solicitud en su código. Sin embargo, si se encuentra en una situación de este tipo, podría considerar si su marco tiene opciones para procesar JSON directamente a través de alguna opción en el controlador o solicitar una declaración del controlador del tipo de contenido, etc. Solicitud en el marco.


Puedes probar:

req.params

Espero que esto le pueda ayudar.