Node.js 中的 URL 模块, 用于将 URL 字符串解析为对象或将对象格式化为 URL 字符串, 该模块比较简单, 共包括 3 个方法:

URL 各部分说明

对于一个 URL 字符串, 其组成部分会有所不同. 其中有些部分只有在 URL 字符串中存在时, 对应字段还才会出现在解析后的对象中. 以下是一个 URL 例子

http://user:[email protected]:8080/path/to/file?query=string#hash
`</pre>

解析后的字段如下:
- `href`: 解析前的完整原始 URL, 协议名和主机名已经转为小写
- `protocol`: 请求协议, 小写, 例如`http:`
- `slashes`: 协议的`:`后面是否有`\`, 返回`true`或`false`
- `host`: URL 主机名, 包括端口信息, 小写, 例如`host.com:8080`
- `auth`: URL 中的认证信息, 例如`user:pass`
- `hostname`: 主机名, 小写, 例如`host.com`
- `port`: 主机的端口号, 例如`8080`
- `pathname`: URL 中的路径, 例如`/path/to/file`
- `search`: 查询对象, 即: `queryString`, 包括之前的`?`, 例如`?query=string`; 如果 `parseQueryString = true`, 则返回`{'query':'string'}`
- `query`: 例如`query=string`
- `hash`: 锚点部分, 即`#`之后的部分, 例如`#hash`

### 将 URL 字符串转换为对象: url.parse(urlStr[, parseQueryString[, slashesDenoteHost]])

`url.parse()`方法用于解析 URL 对象, 解析后范湖第一个 JSON 对象. 例如:

<pre>`&gt; var url = 'http://user:[email protected]:8080/path/to/file?query=string#hash'
undefined
&gt; url
'http://user:[email protected]:8080/path/to/file?query=string#hash'
&gt; var urlModule = require('url');
undefined
&gt; urlModule.parse(url)
Url {
  protocol: 'http:',
  slashes: true,
  auth: 'user:pass',
  host: 'host.com:8080',
  port: '8080',
  hostname: 'host.com',
  hash: '#hash',
  search: '?query=string',
  query: 'query=string',
  pathname: '/path/to/file',
  path: '/path/to/file?query=string',
  href: 'http://user:[email protected]:8080/path/to/file?query=string#hash' }
`</pre>

第二个可选参数设置为`true`的时候, 会使用`queryString`模块来解析 URL 中的`query` 部分, 默认为`false`.

第三个参数为`true`的时候, 会把诸如`//foo/bar`这样的 URL 解析为 `{host: 'foo', pathname: '/bar'}`, 而不是 `{pathname: '//foo/bar'}`. 默认为`false`

### 将对象格式化为 URL 字符串: url.format(urlObj)

`url.resolve()`用于格式化URL对象, 输入一个 URL 对象, 返回格式化后的 URL 字符串, 例如:

<pre>`&gt; var url = require('url');
undefined
&gt; var urlObj = {
... protocol: 'http:',
... slashes: true,
... hostname: 'host.com',
... port: 8080,
... hash: '#hash',
... search: '?query=string',
... pathname: '/path/to/file'
... }
undefined
&gt; var result = url.format(urlObj)
undefined
&gt; result
'http://host.com:8080/path/to/file?query=string#hash'
`</pre>

### URL 路径处理

`url.resolve()`方法用于处理 URL 路径, 也可以用于处理锚点. 例如

<pre>`url.resolve('/one/two/three', 'four')         // '/one/two/four'
url.resolve('http://example.com/', '/one')    // 'http://example.com/one'
url.resolve('http://example.com/one', '/two') // 'http://example.com/two'

参数拼接, 如果之间没有/, 则参数二替换参数一末尾的文件名 .

注意区分路径和文件名.