nodejs URL模块操作URL相关方法介绍

  url模块

  处理HTTP请求时url模块使用率超高,因为该模块允许解析URL、生成URL,以及拼接URL。首先我们来看看一个完整的URL的各组成部分。

  

复制代码 代码如下:

  href

  -----------------------------------------------------------------

  host              path

  --------------- ----------------------------

  http: // user:pass @ host.com : 8080 /p/a/t/h ?query=string #hash

  -----    ---------   --------   ---- -------- ------------- -----

  protocol     auth     hostname   port pathname     search     hash

  ------------

  query

  我们可以使用.parse方法来将一个URL字符串转换为URL对象,示例如下。

  

复制代码 代码如下:

  url.parse('http://user:[email protected]:8080/p/a/t/h?query=string#hash');

  /* =>

  { protocol: 'http:',

  auth: 'user:pass',

  host: 'host.com:8080',

  port: '8080',

  hostname: 'host.com',

  hash: '#hash',

  search: '?query=string',

  query: 'query=string',

  pathname: '/p/a/t/h',

  path: '/p/a/t/h?query=string',

  href: 'http://user:[email protected]:8080/p/a/t/h?query=string#hash' }

  */

  传给.parse方法的不一定要是一个完整的URL,例如在HTTP服务器回调函数中,request.url不包含协议头和域名,但同样可以用.parse方法解析。

  

复制代码 代码如下:

  http.createServer(function (request, response) {

  var tmp = request.url; // => "/foo/bar?a=b"

  url.parse(tmp);

  /* =>

  { protocol: null,

  slashes: null,

  auth: null,

  host: null,

  port: null,

  hostname: null,

  hash: null,

  search: '?a=b',

  query: 'a=b',

  pathname: '/foo/bar',

  path: '/foo/bar?a=b',

  href: '/foo/bar?a=b' }

  */

  }).listen(80);

  .parse方法还支持第二个和第三个布尔类型可选参数。第二个参数等于true时,该方法返回的URL对象中,query字段不再是一个字符串,而是一个经过querystring模块转换后的参数对象。第三个参数等于true时,该方法可以正确解析不带协议头的URL,例如//www.example.com/foo/bar。

  反过来,format方法允许将一个URL对象转换为URL字符串,示例如下。

  

复制代码 代码如下:

  url.format({

  protocol: 'http:',

  host: 'www.example.com',

  pathname: '/p/a/t/h',

  search: 'query=string'

  });

  /* =>

  'http://www.example.com/p/a/t/h?query=string'

  */

  另外,.resolve方法可以用于拼接URL,示例如下。

  

复制代码 代码如下:

  url.resolve('http://www.example.com/foo/bar', '../baz');

  /* =>

  http://www.example.com/baz

  */

  Query String

  querystring模块用于实现URL参数字符串与参数对象的互相转换,示例如下。

  

复制代码 代码如下:

  querystring.parse('foo=bar&baz=qux&baz=quux&corge');

  /* =>

  { foo: 'bar', baz: ['qux', 'quux'], corge: '' }

  */

  querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });

  /* =>

  'foo=bar&baz=qux&baz=quux&corge='

  */