极简 Node.js 入门 - 5.2 url & querystring
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node
在处理 web 信息的时候经常需要解析 url,Node.js 提供了方便的处理模块
URL 规范
URL 全称是 uniform resource locator,统一资源定位符,根据一个 url 能够在全球确定一个唯一的资源,URL 由不同的字段组成,url 模块提供了两套 API 来处理 URL:一个是旧版本遗留的 API,一个是实现了 WHATWG标准的新 API。为了避免混淆,下文只介绍目前通用的 WHATWG 标准
" https: // user : pass @ sub.example.com : 8080 /p/a/t/h ? query=string #hash "
│ │ │ │ │ hostname │ port │ │ │ │
│ │ │ │ ├─────────────────┴──────┤ │ │ │
│ protocol │ │ username │ password │ host │ │ │ │
├──────────┴──┼──────────┴──────────┼────────────────────────┤ │ │ │
│ origin │ │ origin │ pathname │ search │ hash │
├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤
│ href │
URL 类
Node.js 中的 URL 类和浏览器 URL API完全兼容,可以通过 require('url').URL 使用,也可以使用全局变量 URL
console.log(URL === require('url').URL); // true
new URL(input[, base]):实例化一个 URL 对象
- input:要解析的绝对或相对的 URL。如果
input是相对路径,则需要base;如果input是绝对路径,则忽略base - base:如果
input不是绝对路径,则为要解析的基础地址
const myURL = new URL('/foo', 'https://example.org/'); // https://example.org/foo
URL 实例属性
- url.hash
- url.host
- url.hostname
- url.href
- url.origin
- url.password
- url.pathname
- url.port
- url.protocol
- url.search
- url.serachParam
- url.username
URL 规范中的所有字段都可以从 URL 实例中读取,也可以对属性进行修改
const myURL = new URL('https://abc:xyz@example.com');
console.log(myURL.username); // abc
myURL.username = '123';
console.log(myURL.href); // https://123:xyz@example.com/
解析 url 的文件名可以结合 path 模块
const path = require('path');
const { pathname } = new URL('/foo/bar.txt', 'https://example.org/');
console.log(path.basename(pathname)); // bar.txt
console.log(path.parse(pathname));
querystring
URL 实例中返回的 search 是querystring 的完整字符串,并不是键值对的格式,对 querystring 操作可以使用 url.serachParam 属性,该属性是 URLSearchParams 类实例,同时也是个迭代器,有几个常用的方法操作 querystring
- urlSearchParams.get(name)
- urlSearchParams.set(name, value)
- urlSearchParams.delete(name)
- urlSearchParams.append(name, value)
- urlSearchParams.forEach(fn[, thisArg])
使用都非常简单
const myURL = new URL('https://example.org/?abc=123');
console.log(myURL.searchParams.get('abc')); // 123
myURL.searchParams.append('abc', 'xyz');
console.log(myURL.href); // https://example.org/?abc=123&abc=xyz
myURL.searchParams.delete('abc');
myURL.searchParams.set('a', 'b');
console.log(myURL.href); // https://example.org/?a=b
在较早的版本使用 Node.js 内置模块
querystring来操作 url querystring,简单场景可以不再使用
极简 Node.js 入门 - 5.2 url & querystring的更多相关文章
- 极简 Node.js 入门 - 1.4 NPM & package.json
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 3.2 文件读取
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 5.1 创建 HTTP 服务器
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 5.3 静态资源服务器
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - Node.js 是什么、性能有优势?
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 1.2 模块系统
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 1.3 调试
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.1 Path
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.2 事件
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
随机推荐
- java实现zip文件的解压
使用到的包 org.apache.commons 下载文件 url:文件所在地址需要是http:// filePath:将下载的文件保存的路径 public static void getDownlo ...
- 配置Cassandra开机启动(CentOS 7)
配置环境:centOS 7 1. 编写开机启动脚本[root@cassandra-01 ~]# cd /etc/rc.d/init.d/[root@cassandra-01 init.d]# vi c ...
- Istio 运维实战系列(1):应用容器对 Envoy Sidecar 的启动依赖问题
本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些经验,以及在使用 Istio 过程中可能遇到的一些常见问题的解决方法. 故障现象 该问 ...
- Mybatis源码如何阅读,教你一招!!!
前言 前一篇文章简单的介绍了Mybatis的六个重要组件,这六剑客占据了Mybatis的半壁江山,和六剑客搞了基友,那么Mybatis就是囊中之物了.对六剑客感兴趣的朋友,可以看看这篇文章:Mybat ...
- (超详细)动手编写-链表(Java实现)
目录 前言 概念 链表的设计 完整代码 List接口 抽象父类设计 链表-LinkedList 虚拟头结点 概念 结构设计 方法变动 双向链表 概念 双向链表设计 方法变动 循环链表 单向循环链表 双 ...
- 老生常谈SpringAop日志收集与处理做的工具包
AopLog是基于Spring Aop 和ThreadLocal实现的一个专门对请求方法内容日志的拦截与处理的日志工具包. 场景 : 我想知道一些重要的请求方法的请求参数,响应参数,请求头,以及耗时, ...
- 【开发总结】order by 为什么没有走索引?
1. 现象 表结构如下 CREATE TABLE `ACT_HI_INST` ( `ID` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '主键', ` ...
- 新手接触springboot
新手使用springboot或者说,刚接触java行业,有些不明白的就是项目的架构是怎么样的,我今天在这儿稍微整理了一下 有些新手可能在想,springboot是怎么解决最原始的增-删-改-查, 快速 ...
- 分布式服务(RPC)+分布式消息队列(MQ)面试题精选
分布式系统(distributed system)是建立在网络之上的软件系统.正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性.因此,网络和分布式系统之间的区别更多的在于高层软件(特别是 ...
- Ubuntu18.04安装常用软件指南
安装中文版火狐浏览器 第一步:先卸载:sudo apt-get remove firefox第二步:安装:sudo apt-get install firefox第三步:设置成中文:sudo apt- ...