url: make query() consistent

Match the behavior of the slow path by setting url.query to an empty
object when the url contains no query, but query parsing is requested.

Also add a test for this case, and update the documents to clearly
reflect this behavior.

Fixes: https://github.com/joyent/node/issues/8332
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
This commit is contained in:
Gabriel Wicke 2014-09-25 09:59:18 -07:00 committed by Trevor Norris
parent ac2857b12c
commit b705b73e46
3 changed files with 21 additions and 3 deletions

View File

@ -69,9 +69,10 @@ The following methods are provided by the URL module:
Take a URL string, and return an object. Take a URL string, and return an object.
Pass `true` as the second argument to also parse Pass `true` as the second argument to also parse the query string using the
the query string using the `querystring` module. `querystring` module. If `true` then the `query` property will always be
Defaults to `false`. assigned an object, and the `search` property will always be a (possibly
empty) string. Defaults to `false`.
Pass `true` as the third argument to treat `//foo/bar` as Pass `true` as the third argument to treat `//foo/bar` as
`{ host: 'foo', pathname: '/bar' }` rather than `{ host: 'foo', pathname: '/bar' }` rather than

View File

@ -136,6 +136,9 @@ Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
} else { } else {
this.query = this.search.substr(1); this.query = this.search.substr(1);
} }
} else if (parseQueryString) {
this.search = '';
this.query = {};
} }
return this; return this;
} }

View File

@ -868,6 +868,20 @@ var parseTestsWithQueryString = {
'pathname': '/', 'pathname': '/',
'path': '/' 'path': '/'
}, },
'/example': {
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: '',
query: {},
pathname: '/example',
path: '/example',
href: '/example'
},
'/example?query=value':{ '/example?query=value':{
protocol: null, protocol: null,
slashes: null, slashes: null,