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>`> var url = 'http://user:[email protected]:8080/path/to/file?query=string#hash'
undefined
> url
'http://user:[email protected]:8080/path/to/file?query=string#hash'
> var urlModule = require('url');
undefined
> 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>`> var url = require('url');
undefined
> var urlObj = {
... protocol: 'http:',
... slashes: true,
... hostname: 'host.com',
... port: 8080,
... hash: '#hash',
... search: '?query=string',
... pathname: '/path/to/file'
... }
undefined
> var result = url.format(urlObj)
undefined
> 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'
参数拼接, 如果之间没有/
, 则参数二替换参数一末尾的文件名 .
注意区分路径和文件名.