Tôi có một máy chủ rack rất đơn giản Ruby, như:Làm thế nào để nhận được một đối tượng JSON với rack
app = Proc.new do |env|
req = Rack::Request.new(env).params
p req.inspect
[200, { 'Content-Type' => 'text/plain' }, ['Some body']]
end
Rack::Handler::Thin.run(app, :Port => 4001, :threaded => true)
Bất cứ khi nào tôi gửi một yêu cầu POST HTTP đến máy chủ với một đối tượng JSON:
{ "session": {
"accountId": String,
"callId": String,
"from": Object,
"headers": Object,
"id": String,
"initialText": String,
"parameters": Object,
"timestamp": String,
"to": Object,
"userType": String } }
Tôi không nhận được gì. Tôi có thể phát hiện yêu cầu nhận được nhưng không thể nhận dữ liệu. Các kết quả tại bàn điều khiển của tôi cho puts req.inspect
là một cái gì đó như:
"{}"
Làm cách nào để nhận dữ liệu?
Tôi cố gắng để thay đổi điều đó với một cái gì đó như:
request = Rack::Request.new env
object = JSON.parse request.body
puts JSON.pretty_generate(object)
Nhưng tôi nhận được cảnh báo sau đây:
!! Unexpected error while processing request: can't convert StringIO into String
gì một ví dụ về JSON được gửi đi? – tadman
không có gì được gửi, JSON được nhận một cái gì đó giống như ví dụ trên với phiên gốc – Eqbal
Ok có vẻ như tôi đang sử dụng một cái gì đó như: msg = JSON.parse env ['rack.input'] đọc Sau đó, chỉ cần sử dụng params trong msg băm, ít nhất nó làm việc với tôi theo cách này – Eqbal