2011-01-03 7 views
12

をクエリ文字列使用してGET/POSTとして配列を送信し、受信:私はNode.jsの - 私は、次のコードを持っているが、動作していないよう

var post_req = { 
    array: [ 
     [ { 
      param1: 'something', 
      param2: 123 
     } ], 
     [ ], 
     [ ], 
     [ { 
      param2: 'something', 
      param4: 1234, 
      param1: 'hello' 
     } ] 
    ] 
}; 
var data_send = querystring.stringify(post_req); 

var request = client.request('POST', '/', headers); 
request.end(data_send); 

if(req.method == 'POST') { 
    req.addListener('data', function(chunk) 
    { 
     POST = querystring.parse(chunk); 
     console.log(POST); 
    } 
} 

、上記の私のコメントを確認するには

{ array: 
    [ { '][param1': 'something' } 
    , { '][param2': '123' } 
    , { '][param2': 'something' } 
    , { '][param4': '1234' } 
    , { '][param1': 'hello' } 
    ] 
} 
+0

ノードのクエリ文字列モジュールは、ネストされた配列(おそらく空のもの)を処理するように設計されていなかったように見えます。 POSTリクエストの場合は、代わりにJSON.stringifyとJSON.parseを使用できますか? – RandomEtc

答えて

10

これを修正する新しいノードパッケージがありにより示唆されるようhttps://github.com/visionmedia/node-querystringを使用:「NPM適量をインストールします」。 「それは0.3.xから削除するので、このライブラリは以前と一般的に望ましい行動(と倍の速度)を提供したとして、営巣支援ノードのためのクエリ文字列パーサ」

https://github.com/visionmedia/node-querystring

誰であればそれが0.3.xから削除された理由を教えてください、私はあなたのコメントのためにupvoteを与えるでしょう。 (私はNode.jsへの私の信頼が回復したいと思っています)

6

:オブジェクトではなく、自分の名前に余分な「] [」文字で5つのパラメータに対応し、5サブアレイで終わりますノードのquerystring.stringify関数はネストされた配列を処理しません(書き込み時)。

は、あなたはそれがアレイの1つのレベルを扱うことhttps://github.com/ry/node/blob/master/lib/querystring.js

ノートで文字列化のソースを見ることができますが、それは再帰しません。配列を検出すると、stringifyPrimitiveを使用して配列の値をエンコードします。 stringifyPrimitiveは、配列、数字、ブール値、および文字列のみを扱いません。

私のコメントでは、POSTリクエストを使用しているので、複雑なデータ構造にJSONエンコーディングを使用することをお勧めします。

それとも@FriendlyDev

5

文字列として送信されたJSONオブジェクトを再作成するためにquerystring.parseを使用しないでください。代わりにJSON.parseを使用してください。そして、querystring.stringifyの代わりにJSON.stringifyを使用してください。

querystringは、URLにエンコードされたパラメータを送信するときやフォームを投稿するときに便利です。しかし、すべてのデータを含むJSONオブジェクトを1つだけ送信する場合は、その使用には何の意味もありません。

あなたのシナリオでは、クエリーストリングライブラリを却下し、すでに含まれているJSONライブラリを使用します。よりクリーンで速くなります。

http://www.json.org/js.html

関連する問題