2011-07-11 3 views
2

私はSinatraアプリケーションを使用してサーバーリクエストを受信して​​います。これらを別のクラスで解剖したいのですが、私は「リクエスト」と呼んでいますが、リクエストオブジェクトを渡すとボディが落ちます。メインクラスのrequest.bodyを読み込もうとしましたが、新しいクラスでそれを読み取ろうとすると、JSONparserオクテットエラーが生成されます。私は以下のコードで要求クラスに要求を渡し、後Sinatraではリクエストボディを他のクラスに渡す方法はありますか?

puts JSON.parse request.body.read 

:メインシナトラファイルで

は、このテスト・コールは、正しい応答を生成します。

req=Request.new(request) 

しかし、Requestクラスの初期化デフで、同じ「プット」のコードは、上記のエラーを生成します。

JSON::ParserError - A JSON text must at least contain two octets!: 

両方のファイルは、JSONの要件が含まれます。

回避策はかなりシンプルですが、私が期待したとおりに動作しない理由を理解することができれば、より洗練された解決策が好まれます。どのような考えが評価されます。

+0

私はSinatraがクラスで身体を要求するのに問題があったとは思わなかった。 –

答えて

0

Request.newコンストラクタは

request.cloneはあなたが

極端な何かを必要とする場合は、徹底したオブジェクトの検査を行う必要があり、適切

の作品Requestオブジェクトからクローンを作成していないよう 私のテストから

+0

コメントありがとうございました。私はあなたの提案を試みましたが、Sinatraリクエストオブジェクトに反対する新しいRequestオブジェクトを作成すると、クローン作成もうまくいかないようです。この場合、私は次のコードを使用しています: "req = Request.new(request.clone)"。それはあなたが意味することですか? – Scott