本文对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'

前端开发系列088-Node篇之url的更多相关文章

  1. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  2. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  3. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  4. 旨在脱离后端环境的前端开发套件 - IDT Server篇

    IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...

  5. 前端开发【第2篇:CSS】

    鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...

  6. cesium-webpack 入门开发系列一初探篇(附源码下载)

    前言 cesium-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 we ...

  7. [置顶]【实用 .NET Core开发系列】- 导航篇

    前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...

  8. openlayers4 入门开发系列之风场图篇

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  9. openlayers4 入门开发系列之热力图篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  10. Android Metro风格的Launcher开发系列第三篇

    前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...

随机推荐

  1. EvoSuite使用总结

    1.安装EvoSuite插件 以IDEA为例,在Plugins栏搜索EvoSuite后点击install,安装完成后重启IDEA 2.使用EvoSuite 选中文件右键选择Run EvoSuite 生 ...

  2. rabbitmq分布式事务

    Rabbitmq解决分布式事务的原理:可靠消息最终一致性方案 需要保证以下三要素 1.确认生成者一定要将消息可靠投递到MQ[采用MQ的异步confirm消息确认机制] public interface ...

  3. Linux运维基础(二)网络常见问题

    问题:网卡地址配置不正确 1.网卡地址和虚拟主机的网卡地址不统一 2.网关和DNS的信息不正确 解决方法:如何重新配置网卡地址信息 步骤一:在命令行中使用"nmtui"命令,回车 ...

  4. python处理ppt文件,转换成图片或者pdf文件(获取目录下所有文件信息、文件名称分割、文档操作)

    把PPT每一页截图到公众号里推送可是个体力活,那就用python脚本去分解ppt,保存每一个为一张图片好了 需要用到"win32com.client"库 import win32c ...

  5. 如何使用 MySQL 的 EXPLAIN 语句进行查询分析?

    如何使用 MySQL 的 EXPLAIN 语句进行查询分析? EXPLAIN 是 MySQL 提供的分析 SQL 查询执行计划的工具,用于了解查询语句的执行过程,帮助优化查询性能. 1. EXPLAI ...

  6. 你常用哪些工具来分析 JVM 性能?

    常用的 JVM 性能分析工具 JVM 性能分析工具主要用于监控.调试和优化 Java 程序的性能,尤其是在垃圾回收.内存泄漏.线程调度等方面.以下是一些常用的 JVM 性能分析工具: 1. jvisu ...

  7. 『Plotly实战指南』--布局进阶篇

    在数据可视化领域,Plotly的子图布局是打造专业级仪表盘的核心武器. 当面对多维数据集时,合理的子图布局能显著提升多数据关联分析效率,让数据的呈现更加直观和美观. 本文将深入探讨Plotly中子图布 ...

  8. CSS横向滚动

    Flex版本 .super { display: flex; width: 100%; overflow-x: scroll; white-space: nowrap; } .sub { width: ...

  9. 关于php里怎么把字符串‘false’转成boolean的false

    都知道php里类型转换常用的是settype($str,'boolean')和(bool)$str 但是,他们将字符串'false'和'true'转成boolean后都是true,可能这不是我们需要的 ...

  10. 从车道检测项目入门open cv

    从车道检测项目入门open cv 前提声明:非常感谢b站up主 嘉然今天吃带变,感谢其视频的帮助.同时希望各位大佬积积极提出宝贵的意见.(❁´◡`❁)(●'◡'●)╰(°▽°)╯ github地址:h ...