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.
Pass `true` as the second argument to also parse
the query string using the `querystring` module.
Defaults to `false`.
Pass `true` as the second argument to also parse the query string using the
`querystring` module. If `true` then the `query` property will always be
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
`{ host: 'foo', pathname: '/bar' }` rather than

View File

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

View File

@ -868,6 +868,20 @@ var parseTestsWithQueryString = {
'pathname': '/',
'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':{
protocol: null,
slashes: null,