14

次のコードがありますが、動作していないようです。

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);
    }
}

オブジェクトの 5 つのパラメーターに対応する 5 つのサブ配列になりますが、名前に余分な '][' 文字が含まれています。

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

3 に答える 3

13

これを修正する新しいノード パッケージ "npm install qs" があります。

https://github.com/ljharb/qs

「ネストをサポートするノードのクエリ文字列パーサーは 0.3.x から削除されたため、このライブラリは以前の一般的に望まれる動作を提供します (そして 2 倍の速さ)」

0.3.x から削除された理由を誰か教えていただければ、あなたのコメントに賛成票を投じます。(Node.js に対する信頼を取り戻したい。)

于 2011-11-25T18:54:34.330 に答える
6

上記の私のコメントを確認するために、ノードのquerystring.stringify関数はネストされた配列を処理しません (執筆時点)。

https://github.com/ry/node/blob/master/lib/querystring.jsで stringify のソースを確認できます。

1 レベルの配列を処理しますが、再帰はしないことに注意してください。配列が見つかるとstringifyPrimitive、配列の値をエンコードするために使用します。stringifyPrimitive配列を処理せず、数値、ブール値、および文字列のみを処理することがわかります。

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

または、@FriendlyDev の提案に従ってhttps://github.com/visionmedia/node-querystringを使用します

于 2011-01-03T22:35:47.683 に答える