OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4529|回复: 1

极简 Node.js 入门 - 5.2 url & querystring

[复制链接]

143

主题

145

帖子

0

精华

高级会员

Rank: 4

积分
585
金钱
585
注册时间
2020-5-25
在线时间
42 小时
发表于 2020-10-15 16:47:08 | 显示全部楼层 |阅读模式
在处理 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); // abcmyURL.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.txtconsole.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')); // 123myURL.searchParams.append('abc', 'xyz');console.log(myURL.href); // https://example.org/?abc=123&abc=xyzmyURL.searchParams.delete('abc');myURL.searchParams.set('a', 'b');console.log(myURL.href); // https://example.org/?a=b
在较早的版本使用 Node.js 内置模块 querystring 来操作 url querystring,简单场景可以不再使用
参考文本


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4471
金钱
4471
注册时间
2013-4-22
在线时间
335 小时
发表于 2020-10-15 19:32:17 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 07:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表