Browse Source

querystring: do not add sep for empty array

Currently, stringification of an empty array outputs a single
separator character. This commit causes an empty array to output
the empty string.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
archived-io.js-v0.10
cjihrig 10 years ago
committed by Fedor Indutny
parent
commit
61ddad1314
  1. 23
      lib/querystring.js
  2. 7
      test/simple/test-querystring.js

23
lib/querystring.js

@ -128,9 +128,6 @@ var stringifyPrimitive = function(v) {
QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) { QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) {
sep = sep || '&'; sep = sep || '&';
eq = eq || '='; eq = eq || '=';
if (util.isNull(obj)) {
obj = undefined;
}
var encode = QueryString.escape; var encode = QueryString.escape;
if (options && typeof options.encodeURIComponent === 'function') { if (options && typeof options.encodeURIComponent === 'function') {
@ -138,16 +135,22 @@ QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) {
} }
if (util.isObject(obj)) { if (util.isObject(obj)) {
return Object.keys(obj).map(function(k) { var keys = Object.keys(obj);
var fields = [];
for (var i = 0; i < keys.length; i++) {
var k = keys[i];
var v = obj[k];
var ks = encode(stringifyPrimitive(k)) + eq; var ks = encode(stringifyPrimitive(k)) + eq;
if (util.isArray(obj[k])) {
return obj[k].map(function(v) { if (util.isArray(v)) {
return ks + encode(stringifyPrimitive(v)); for (var j = 0; j < v.length; j++)
}).join(sep); fields.push(ks + encode(stringifyPrimitive(v[j])));
} else { } else {
return ks + encode(stringifyPrimitive(obj[k])); fields.push(ks + encode(stringifyPrimitive(v)));
} }
}).join(sep); }
return fields.join(sep);
} }
return ''; return '';
}; };

7
test/simple/test-querystring.js

@ -57,7 +57,9 @@ var qsTestCases = [
valueOf: 'bar', valueOf: 'bar',
__defineGetter__: 'baz' }], __defineGetter__: 'baz' }],
// See: https://github.com/joyent/node/issues/3058 // See: https://github.com/joyent/node/issues/3058
['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }] ['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }],
[null, '', {}],
[undefined, '', {}]
]; ];
// [ wonkyQS, canonicalQS, obj ] // [ wonkyQS, canonicalQS, obj ]
@ -87,7 +89,8 @@ var qsWeirdObjects = [
[{f: false, t: true}, 'f=false&t=true', {'f': 'false', 't': 'true'}], [{f: false, t: true}, 'f=false&t=true', {'f': 'false', 't': 'true'}],
[{n: null}, 'n=', {'n': ''}], [{n: null}, 'n=', {'n': ''}],
[{nan: NaN}, 'nan=', {'nan': ''}], [{nan: NaN}, 'nan=', {'nan': ''}],
[{inf: Infinity}, 'inf=', {'inf': ''}] [{inf: Infinity}, 'inf=', {'inf': ''}],
[{a: [], b: []}, '', {}]
]; ];
// }}} // }}}

Loading…
Cancel
Save