# URL
~~~
穩定度: 3 - 穩定
~~~
該模塊包含用以 URL 解析的實用函數。 使用 `require('url')` 來調用該模塊。
不同的 URL 字符串解析后返回的對象會有一些額外的字段信息,僅當該部分出現在 URL 中才會有。以下是一個 URL 例子:
`'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'`
- `href`: 所解析的完整原始 URL。協議名和主機名都已轉為小寫。
~~~
例如: `'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'`
~~~
- `protocol`: 請求協議,小寫
~~~
例如: `'http:'`
~~~
- `host`: URL主機名已全部轉換成小寫, 包括端口信息
~~~
例如: `'host.com:8080'`
~~~
- `auth`:URL中身份驗證信息部分
~~~
例如: `'user:pass'`
~~~
- `hostname`:主機的主機名部分, 已轉換成小寫
~~~
例如: `'host.com'`
~~~
- `port`: 主機的端口號部分
~~~
例如: `'8080'`
~~~
- `pathname`: URL的路徑部分,位于主機名之后請求查詢之前, including the initial slash if present.
~~~
例如: `'/p/a/t/h'`
~~~
- `search`: URL 的“查詢字符串”部分,包括開頭的問號。
~~~
例如: `'?query=string'`
~~~
- `path`: `pathname` 和 `search` 連在一起。
~~~
例如: `'/p/a/t/h?query=string'`
~~~
- `query`: 查詢字符串中的參數部分(問號后面部分字符串),或者使用 `querystring.parse()` 解析后返回的對象。
~~~
例如: `'query=string'` or `{'query':'string'}`
~~~
- `hash`: URL 的 “#” 后面部分(包括 # 符號)
~~~
例如: `'#hash'`
~~~
以下是 URL 模塊提供的方法:
### url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
輸入 URL 字符串,返回一個對象。
將第二個參數設置為 `true` 則使用 `querystring` 模塊來解析 URL 中德查詢字符串部分,默認為 `false`。
將第三個參數設置為 `true` 來把諸如 `//foo/bar` 這樣的URL解析為 `{ host: 'foo', pathname: '/bar' }` 而不是 `{ pathname: '//foo/bar' }`。 默認為 `false`。
### url.format(urlObj)
輸入一個 URL 對象,返回格式化后的 URL 字符串。
- `href` 屬性會被忽略處理.
- `protocol`無論是否有末尾的 `:` (冒號),會同樣的處理
- 這些協議包括 `http`, `https`, `ftp`, `gopher`, `file` 后綴是 `://` (冒號-斜杠-斜杠).
- 所有其他的協議如 `mailto`, `xmpp`, `aim`, `sftp`, `foo`, 等 會加上后綴 `:` (冒號)
- `auth` 如果有將會出現.
- `hostname` 如果 `host` 屬性沒被定義,則會使用此屬性.
- `port` 如果 `host` 屬性沒被定義,則會使用此屬性.
- `host` 優先使用,將會替代 `hostname` 和`port`
- `pathname` 將會同樣處理無論結尾是否有`/` (斜杠)
- `search` 將會替代 `query`屬性
- `query` (object類型; 詳細請看 `querystring`) 如果沒有 `search`,將會使用此屬性.
- `search` 無論前面是否有 `?` (問號),都會同樣的處理
- `hash`無論前面是否有`#` (井號, 錨點),都會同樣處理
### url.resolve(from, to)
給定一個基礎URL路徑,和一個href URL路徑,并且象瀏覽器那樣處理他們可以帶上錨點。 例子:
~~~
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'
~~~