繁体   English   中英

Node.js - 使用查询字符串发送和接收数组作为GET / POST

[英]Node.js - Send and receive Array as GET/POST using querystring

我有以下代码,但它似乎不起作用:

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' }
   ]
}

有一个新的节点包修复了这个问题:“npm install qs”。

https://github.com/ljharb/qs

“查询字符串解析器用于支持嵌套的节点,因为它已从0.3.x中删除,因此该库提供了以前和通常所需的行为(并且速度提高了两倍)”

如果有人能告诉我为什么它从0.3.x中删除了,我会给你一个评论的upvote。 (我希望我对Node.js恢复信心。)

要确认我上面的注释,node的querystring.stringify函数将不会处理嵌套数组(在撰写本文时)。

你可以在https://github.com/ry/node/blob/master/lib/querystring.js看到stringify的来源。

请注意,它处理一个级别的数组,但它不会递归。 当它找到一个数组时,它使用stringifyPrimitive来编码数组的值。 你可以看到stringifyPrimitive不处理数组,只有数字,布尔和字符串。

正如我在评论中建议的那样,假设您正在使用POST请求,那么更好的想法是对您的复杂数据结构使用JSON编码。

或者使用https://github.com/visionmedia/node-querystring通过@FriendlyDev的建议

不要使用querystring.parse重新创建以字符串形式发送的JSON对象。 请改用JSON.parse。 并使用JSON.stringify而不是querystring.stringify

当您在网址中发送编码参数或发布表单时,查询字符串很有用。 但是,如果只发送一个带有所有数据的JSON对象,那么使用它是没有意义的。

在您的场景中,我将关闭查询字符串库并使用已包含的JSON库。 它会更清洁,更快。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM