机架应用,params作为关键

时间:2012-11-18 15:37:59

标签: ruby post request rack

我正在使用

申请机架申请
curl -X POST -d '{"device":{"username":"123456","name":"some name","location":"Hidden"}}' http://localhost:9292/device

在机架应用程序中,我正在创建请求对象

request = Rack::Request.new(env)

我期待POST数据将以params hash

request.params => should be a normal hash

但不知何故,这不太正确。我有这种格式的参数

{{"device":{"username":"123456","name":"some name","location":"Hidden"}}=>nil}

所以我需要的params数据成为哈希的关键。为什么会这样,以及如何使它像这样正常#/ p>

{"device":{"username":"123456","name":"some name","location":"Hidden"}}

?感谢

1 个答案:

答案 0 :(得分:2)

通常-d期望数据以var=val格式传递,当您没有通过var时,它会将您的数据转换为var并为其分配一个空字符串

当您使用curl时,您会得到以下参数:

 params = {'{"device":{"username":"123456","name":"some name","location":"Hidden"}}'=>nil}

然后你只需将其解析为json:

require 'json'

JSON.parse params.keys.first    
=> {"device"=>{"username"=>"123456", "name"=>"some name", "location"=>"Hidden"}}

或者您可以传递这样的参数:

curl -X POST -d 'json={"device":{"username":"123456","name":"some name","location":"Hidden"}}' :9292

然后你会得到以下参数:

params = {'json'=>'{"device":{"username":"123456","name":"some name","location":"Hidden"}}'}

并简单地解析为JSON

JSON.parse(params['json'])

#=> {"device"=>{"username"=>"123456", "name"=>"some name", "location"=>"Hidden"}}