Sinatra不显示POST数据

时间:2014-02-03 09:47:54

标签: javascript ruby ajax sinatra

我正在从客户端向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"}

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

1 个答案:

答案 0 :(得分:4)

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

要解决此问题,请使用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. 安装
  3. 需要它

      

    要求'机架'

         

    要求'rack / contrib'

  4. 加载use Rack::PostBodyContentTypeParser

  5. 使用此功能,您可以正常使用params json post数据。像这样:

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

    来源: