Van*_*ril 12 request.querystring 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);
Run Code Online (Sandbox Code Playgroud)
和
if( req.method == 'POST' ) {
req.addListener('data', function(chunk)
{
POST = querystring.parse(chunk);
console.log(POST);
}
}
Run Code Online (Sandbox Code Playgroud)
我最终得到5个子数组,对应于对象中的5个参数,但名称中包含额外的'] ['字符:
{ array:
[ { '][param1': 'something' }
, { '][param2': '123' }
, { '][param2': 'something' }
, { '][param4': '1234' }
, { '][param1': 'hello' }
]
}
Run Code Online (Sandbox Code Playgroud)
OCD*_*Dev 11
有一个新的节点包修复了这个问题:"npm install qs".
"查询字符串解析器用于支持嵌套的节点,因为它已从0.3.x中删除,因此该库提供了以前和通常所需的行为(并且速度提高了两倍)"
如果有人能告诉我为什么它从0.3.x中删除了,我会给你一个评论的upvote.(我希望我对Node.js恢复信心.)
为了确认我的评论,节点的querystring.stringify函数将不会处理嵌套数组(在撰写本文时).
你可以在https://github.com/ry/node/blob/master/lib/querystring.js看到stringify的来源.
请注意,它处理一个级别的数组,但它不会递归.当它找到一个数组时,它stringifyPrimitive用来编码数组的值.你可以看到它stringifyPrimitive不处理数组,只有数字,布尔和字符串.
正如我在评论中建议的那样,鉴于您正在使用POST请求,更好的想法是对您的复杂数据结构使用JSON编码.
或者使用https://github.com/visionmedia/node-querystring通过@FriendlyDev的建议
小智 5
不要使用querystring.parse重新创建以字符串形式发送的JSON对象.请改用JSON.parse.并使用JSON.stringify而不是querystring.stringify
当您在网址中发送编码参数或发布表单时,查询字符串很有用.但是,如果只发送一个带有所有数据的JSON对象,那么使用它是没有意义的.
在您的场景中,我将关闭查询字符串库并使用已包含的JSON库.它会更清洁,更快.
| 归档时间: |
|
| 查看次数: |
23062 次 |
| 最近记录: |