Zed
Zed

Reputation: 5921

Sinatra doesn't show POST data

I am making AJAX request from the client to Sinatra but somehow the data doesn't show up.Chrome request headers tab suggests that on the client side is everything OK:

Request Payload 
{ test: Data }

However, on Sinatra's side

  post '/api/check/:name' do
    sleep 3
    puts params.inspect
  end

And the console:

 127.0.0.1 - - [03/Feb/2014 10:45:53] "POST /api/check/name HTTP/1.1" 200 17 3.0019
    {"splat"=>[], "captures"=>["name"], "name"=>"name"}

Post data is nowhere to be found, what's wrong ?

Upvotes: 1

Views: 2499

Answers (1)

Sir l33tname
Sir l33tname

Reputation: 4330

It's a common fault. Sinatra just parse form data (source).

To fix this use rack-contrib or the request.body.

Form parameter would look like this

curl -X POST 127.1:4567/ -d "foo=bar"

Instead of params you can just use request.body.read or use rack contrib.

rack-contrib

  1. Install it with gem install rack-contrib
  2. Require it

    require 'rack'

    require 'rack/contrib'

  3. Load it use Rack::PostBodyContentTypeParser

With this you can use params as normal for json post data. Something like this:

curl -X POST -H "Content-Type: application/json" -d '{"payload":"xyz"}' 127.1:4567/

Source for this:

Upvotes: 4

Related Questions