Sinatra不显示POST数据

我正在从客户端向Sinatra发出AJAX请求,但不知何故数据没有显示出来.Chrome请求标题选项卡表明在客户端方面一切正常:

Request Payload { test: Data } 

然而,在Sinatra方面

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

和控制台:

  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"} 

发布数据无处可寻,有什么不对?

这是一个常见的错误。 Sinatra只是解析表单数据( 源 )。

要修复此问题,请使用rack-contribrequest.body

表单参数看起来像这样

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

您可以使用request.body.read或使用rack contrib而不是params。

机架的contrib

  1. 使用gem install rack-contrib安装它
  2. 需要它

    要求’机架’

    要求’rack / contrib’

  3. 加载它use Rack::PostBodyContentTypeParser

有了这个,你可以像往常一样使用params来获取json post数据。 像这样的东西:

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

来源: