>[success] # 内置模块url
1. Node.js 的`url`模块提供了一组用于解析和操作 URLs(统一资源定位符)的工具函数
* `url.parse()`:把 URL 字符串转换成一个 URL 对象。
* `url.format()`:根据一个 URL 对象返回一个 URL 字符串。
* `url.resolve()`:类似于 Unix 中的`basename`,可以用来合并两个 URL 字符串。
2. `url.parse()`将一个 URL 字符串解析成一个包含 URL 组件的对象。你可以访问这些 URL 组件,例如`protocol`、`hostname`、`pathname`和`hash`。
~~~
const url = require('url');
const myUrl = 'https://github.com/nodejs/node/blob/v12.3.0/doc/api/url.md#url_url_parse_urlstring_parsequerystring_slashesdenotehost';
const parsedUrl = url.parse(myUrl);
console.log(parsedUrl);
// 输出:Url {
// protocol: 'https:',
// slashes: true,
// auth: null,
// host: 'github.com',
// port: null,
// hostname: 'github.com',
// hash: '#url_url_parse_urlstring_parsequerystring_slashesdenotehost',
// search: null,
// query: null,
// pathname: '/nodejs/node/blob/v12.3.0/doc/api/url.md',
// path: '/nodejs/node/blob/v12.3.0/doc/api/url.md',
// href: 'https://github.com/nodejs/node/blob/v12.3.0/doc/api/url.md#url_url_parse_urlstring_parsequerystring_slashesdenotehost'
// }
~~~
>[info] ## 常见的api
| 方法名 | 描述 |
| --- | --- |
| `url.parse(urlString[, parseQueryString[, slashesDenoteHost]])` | 解析 URL 字符串并返回一个 URL 对象。parseQueryString 默认为`false`,表示是否将查询参数解析为对象形式。slashesDenoteHost 默认为`false`,表示是否将两个斜杆视为主机名的分隔符。 |
| `url.format(urlObject)` | 接收一个 URL 对象并返回相应的 URL 字符串。 |
| `url.resolve(from, to)` | 从`from`URL 解析出`to`URL 的绝对 URL。 |
| `url.URL` | URL 类。可以用来直接创建 URL 对象。 |
| `url.URLSearchParams` | URLSearchParams 类。可以用来操作 URL 查询参数。 |
>[danger] ##### `url.parse(urlString[, parseQueryString[, slashesDenoteHost]])`
将 URL 字符串解析为 URL 对象。
* **urlString**:`<string>`,要解析的 URL 字符串。
* **parseQueryString**:`<boolean>`,可选参数,默认为 false。为 true 时表示将查询字符串解析为对象。
* **slashesDenoteHost**:`<boolean>`,可选参数,默认为 false。为 true 时表示两个斜杆视为主机名的分隔符。
返回`<URL>`对象。
~~~
const { URL } = require('url');
const myUrl = new URL('https://example.com/foo/bar?baz=qux');
console.log(myUrl);
// 输出:
// URL {
// href: 'https://example.com/foo/bar?baz=qux',
// origin: 'https://example.com',
// protocol: 'https:',
// username: '',
// password: '',
// host: 'example.com',
// hostname: 'example.com',
// port: '',
// pathname: '/foo/bar',
// search: '?baz=qux',
// searchParams: URLSearchParams { 'baz' => 'qux' },
// hash: ''
// }
~~~
>[danger] ##### `url.format(urlObject)`
接收一个 URL 对象,返回相应的 URL 字符串。
* **urlObject**:`<URL>`,要转换的 URL 对象。
返回`<string>`,表示 URL 字符串。
~~~
const { URL } = require('url');
const myUrl = new URL('https://example.com/foo/bar?baz=qux');
console.log(myUrl.href); // 输出:https://example.com/foo/bar?baz=qux
const { format } = require('url');
console.log(format(myUrl)); // 输出:https://example.com/foo/bar?baz=qux
~~~
>[danger] ##### `url.resolve(from, to)`
从`from`URL 解析出`to`URL 的绝对 URL。
* **from**:`<string>`,基本 URL,也就是相对 URL 解析时的上下文。
* **to**:`<string>`,要解析的目标 URL。
返回`<string>`,表示绝对 URL。
~~~
const { resolve } = require('url');
console.log(resolve('/foo/bar', './baz')); // 输出:/foo/baz
console.log(resolve('/foo/bar', '/baz')); // 输出:/baz
~~~
>[danger] ##### `url.URL`
URL 类。可以用来直接创建 URL 对象。
~~~
const { URL } = require('url');
const myUrl = new URL('https://example.com/foo/bar?baz=qux');
console.log(myUrl.protocol); // 输出:https:
~~~
>[danger] ##### `url.URLSearchParams`
URLSearchParams 类。可以用来操作 URL 查询参数。
~~~
const { URLSearchParams } = require('url');
const params = new URLSearchParams('foo=bar&baz=qux');
console.log(params.get('foo')); // 输出:bar
console.log(params.get('baz')); // 输出:qux
console.log(params.getAll('foo')); // 输出:['bar']
console.log(params.toString()); // 输出:foo=bar&baz=qux
~~~
- 基础
- 什么是Node.js
- 理解 I/O 模型
- 理解node 中 I/O
- 对比node 和java 使用场景
- node 模块管理
- 内置模块 -- buffer
- 内置模块 -- fs
- fs -- 文件描述符
- fs -- 打开文件 api
- fs -- 文件读取 api
- fs -- 文件写入 api
- fs -- 创建目录 api
- fs -- 读取文件目录结构 api
- fs -- 文件状态(信息) api
- fs -- 删除文件/目录 api
- fs -- 重命名 api
- fs -- 复制文件 api
- 内置模块 -- events
- 内置模块 -- stream
- 可读流 -- Readable
- 可写流 -- Writable
- Duplex
- Transform
- 内置模块 -- http
- http -- 从客户端发起
- http -- 从服务端发起
- 内置模块 -- url
- 网络开发