前端开发系列088-Node篇之url

本文对Node的内置模块url进行介绍,包括基本情况和简单使用。

一、模块的内容

url是Node的内置核心模块之一,无需单独安装可以直接在代码中通过var url = require("url")的方式加载,该模块提供了很多使用的函数专门用于URL的处理和解析。

在命令行环境中可以直接通过REPL来查看URL模块的内容,这个模块本身返回一个对象。

URL模块中有三个比较重要的方法

  • parse方法     用于将URL字符串转换为对象
  • format方法   用于将特定的对象还原为URL字符串
  • resolve方法 用于将两个(字符串 base url对象和href url对象)路径合成一个路径。
bogon:~ wendingding$ node
> console.dir(url);
{ Url: [Function: Url],
  parse: [Function: urlParse],
  resolve: [Function: urlResolve],
  resolveObject: [Function: urlResolveObject],
  format: [Function: urlFormat],
  URL: [Function: URL],
  URLSearchParams: [Function: URLSearchParams],
  domainToASCII: [Function: domainToASCII],
  domainToUnicode: [Function: domainToUnicode] }

URL的结构

Node内置的url模块提供了两套API来处理URL字符串

  • Node.js特有的API,是旧版本的遗留;
  • 实现了WHATWG URL Standard的API ,该标准也在各种浏览器中被使用。

上图给出的是两套API的结构比较情况。其中网址上方是Node API中的的url.parse()方法解析后返回的对象结构,网址下方的则是WHATWG URL对象的结构,在具体使用的时候需要注意区分。

使用示例:

//WHATWG URL Standard API
const { URL } = require('url');
const myURL =
  new URL('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash');

//Node API
const url = require('url');
const myURL =
  url.parse('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash');

二、基本使用

这里主要介绍URL模块中常用方法的基本使用、这些方法的作用、参数传递以及返回值结构等情况,并提供简短的代码示例。

parse方法

作用 解析URL字符串并返回URL对象。

语法 url.parse( urlStr , [ parseQueryString ] , [ slashesDenoteHost ])

参数

  • urlStr
    字符串类型 | 待解析的 URL 字符串
  • parseQueryString
    布尔值类型 | 是否把查询字符串转换为对象。
  • slashesDenoteHost
    布尔值类型 | 是否把`//后...下一个/之前`的字符串会解析为host。

返回值

  • 解析成功
    URL对象。
  • 解析失败
    报错(若参数非字符串抛出`TypeError`|若无法编码抛出`URIError`) 。

示例

wendingding$ node
url.parse("https://user:pass@www.wendingding.com:8080/p/a/t/h?query=string#hash")
Url {
  protocol: 'https:',
  slashes: true,
  auth: 'user:pass',
  host: 'www.wendingding.com:8080',
  port: '8080',
  hostname: 'www.wendingding.com',
  hash: '#hash',
  search: '?query=string',
  query: 'query=string',
  pathname: '/p/a/t/h',
  path: '/p/a/t/h?query=string',
  href: 'https://user:pass@www.wendingding.com:8080/p/a/t/h?query=string#hash' 
}

URL对象字段说明

href      被转换的原URL字符串。
protocol  请求使用的协议。
auth      URL字符串中的认证信息。
host      URL字符串中的完整地址和端口号。
port      URL字符串中的端口号。
slashes   协议和路径中间是否使用//分隔符。
hostname  URL字符串中的完整地址(`主机名`|`IP地址`)。
hash      URL字符串中的散列字符串,包含起始字符`#`。
search    URL字符串中的查询字符串,包含起始字符`?`。
path      URL字符串中的路径,包含查询字符串。
pathname  URL字符串中的路径,不包含查询字符串。
query     查询字符串(如果parseQueryString参数传递true,则保存为对象)。

示例

wendingding$ node
>var obj = url.parse("https://www.wendingding.com/doc?name=mitaoer&password=931007",true)
undefined
>obj
Url {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'www.wendingding.com',
  port: null,
  hostname: 'www.wendingding.com',
  hash: null,
  search: '?name=mitaoer&password=931007',
  query: { name: 'mitaoer', password: '931007' },
  pathname: '/doc',
  path: '/doc?name=mitaoer&password=931007',
  href: 'https://www.wendingding.com/doc?name=mitaoer&password=931007' }
> obj.query
{ name: 'mitaoer', password: '931007' }

format方法

作用 把URL对象转换(序列化)为URL字符串。

语法 url.format( url , [ options ])

参数

  • url
    [WHATWG URL](http://nodejs.cn/api/url.html#url_the_whatwg_url_api)类型的对象。
  • options
    对象类型 | 用于控制转换(序列化)的配置。

返回值 如果解析成功,那么就返回对应的URL字符串。

obj
Url {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'www.wendingding.com',
  port: null,
  hostname: 'www.wendingding.com',
  hash: null,
  search: '?name=mitaoer&password=931007',
  query: { name: 'mitaoer', password: '931007' },
  pathname: '/doc',
  path: '/doc?name=mitaoer&password=931007',
  href: 'https://www.wendingding.com/doc?name=mitaoer&password=931007' }
> obj.query
{ name: 'mitaoer', password: '931007' }

> var urlStr = url.format(obj)
> urlStr
'https://www.wendingding.com/doc?name=mitaoer&password=931007'

备注 该方法第二个参数Options参数是可选的接受一个配置对象,可以配置下面列出的四个字段它们都是布尔类型的值,如果不配置那么默认均为true。

search      是否应该包含搜索查询。
auth        是否应该包含用户名和密码。
fragment    结果字符串是否应该包含分段。
unicode     Unicode字符是否应该被直接编码。

resolve方法

作用 同浏览器那样把URL转换为完整的目标地址。

语法 url.resolve( from , to )

参数

  • from
    字符串类型 | 解析时相对的基本 URL(起点路径)
  • to
    字符串类型 | 要解析的超链接的 URL(参考路径)。

示例

> url.resolve('/one/two/three', 'four');  
'/one/two/four'
> url.resolve('http://www.wendingding.com/', '/one');
'http://www.wendingding.com/one'
> url.resolve('http://www.wendingding.com/one', '/two');
'http://www.wendingding.com/two'

posted on 2022-12-16 08:56  文顶顶  阅读(120)  评论(0编辑  收藏  举报

导航