url: use "empty" object for empty query strings
This makes things consistent with the way that the querystring module creates parsed results. PR-URL: https://github.com/nodejs/node/pull/6289 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michaël Zasso <mic.besace@gmail.com> Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com> Reviewed-By: Minwoo Jung <jmwsoft@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
4fbd375724
commit
e9dc6306ca
10
lib/url.js
10
lib/url.js
@ -60,6 +60,12 @@ const slashedProtocol = {
|
||||
};
|
||||
const querystring = require('querystring');
|
||||
|
||||
// This constructor is used to store parsed query string values. Instantiating
|
||||
// this is faster than explicitly calling `Object.create(null)` to get a
|
||||
// "clean" empty object (tested with v8 v4.9).
|
||||
function ParsedQueryString() {}
|
||||
ParsedQueryString.prototype = Object.create(null);
|
||||
|
||||
function urlParse(url, parseQueryString, slashesDenoteHost) {
|
||||
if (url instanceof Url) return url;
|
||||
|
||||
@ -168,7 +174,7 @@ Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
|
||||
}
|
||||
} else if (parseQueryString) {
|
||||
this.search = '';
|
||||
this.query = {};
|
||||
this.query = new ParsedQueryString();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@ -358,7 +364,7 @@ Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
|
||||
} else if (parseQueryString) {
|
||||
// no query string, but parseQueryString still requested
|
||||
this.search = '';
|
||||
this.query = {};
|
||||
this.query = new ParsedQueryString();
|
||||
}
|
||||
|
||||
var firstIdx = (questionIdx !== -1 &&
|
||||
|
@ -927,7 +927,7 @@ var parseTestsWithQueryString = {
|
||||
path: '/example',
|
||||
href: '/example'
|
||||
},
|
||||
'/example?query=value':{
|
||||
'/example?query=value': {
|
||||
protocol: null,
|
||||
slashes: null,
|
||||
auth: null,
|
||||
@ -951,6 +951,8 @@ for (const u in parseTestsWithQueryString) {
|
||||
}
|
||||
}
|
||||
|
||||
assert.notStrictEqual(Object.getPrototypeOf(actual.query), Object.prototype);
|
||||
|
||||
assert.deepEqual(actual, expected);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user