NodeJS的URL模块进阶

附录:常用HTTP响应头和请求头信息对照表

  1. Node简介
  2. 第一个node程序
  3. module(模块系统)
  4. npm包管理器
  5. 模块系统优先级
  6. 认识http内置模块
  7. url内置模块
  8. path内置模块
  9. fs内置模块
  10. http模块服务端进阶
  11. http报文浅析
  12. url模块进阶
  13. path模块进阶
  14. querystring模块进阶
  15. 了解Buffer和Stream
  16. os模块
  17. Buffer模块
  18. Stream模块
  19. http模块客户端
  20. Cookie浅析

URL模块进阶

一个 URL 字符串是一个结构化的字符串,它包含多个有意义的组成部分。 当被解析时,会返回一个 URL 对象,它包含每个组成部分作为属性。

url模块提供了两套API来处理URLs:一个是Node.js遗留的特有的API,另一个则是通常使用在web浏览器中 实现了WHATWG URL Standard的API.

WHATWG (Web Hypertext Application Technology Working Group - 网页超文本应用技术工作小组) API 浏览器厂商和标准组织博弈出来的产物,重要的是明白它们背后的人是谁。WHATWG受到了Opera, Mozilla和Chrome, Safari的支持,而W3C的背后则隐藏着IE这个微软。私以为在工业发展速度远远超过标准定义的今天,WHATWG或许会更权威一点。关于HTML5标准的定制,最开始是WHATWG在做的,由于到后期大部分浏览器厂商都已经实现了统一标准,W3C想不支持也是不行。

请注意: 虽然Node.js遗留的特有的API并没有被弃用,但是保留的目的是用于向后兼容已有应用程序。因此新的应用程序请使用WHATWG API。

WHATWG与Node.js遗留的特有的API的比较如下。网址'http://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash'上方是由遗留的url.parse()返回的对象属性。网址下方的则是由WHATWG URL对象的属性。

WHATWG URL的origin属性包括protocolhost,但不包含auth :

┌─────────────────────────────────────────────────────────────────────────────────────────────┐
│                                            href                                             │
├──────────┬──┬─────────────────────┬─────────────────────┬───────────────────────────┬───────┤
│ protocol │  │        auth         │        host         │           path            │ hash  │
│          │  │                     ├──────────────┬──────┼──────────┬────────────────┤       │
│          │  │                     │   hostname   │ port │ pathname │     search     │       │
│          │  │                     │              │      │          ├─┬──────────────┤       │
│          │  │                     │              │      │          │ │    query     │       │
"  https:   //    user   :   pass   @ sub.host.com : 8080   /p/a/t/h  ?  query=string   #hash "
│          │  │          │          │   hostname   │ port │          │                │       │
│          │  │          │          ├──────────────┴──────┤          │                │       │
│ protocol │  │ username │ password │        host         │          │                │       │
├──────────┴──┼──────────┴──────────┼─────────────────────┤          │                │       │
│   origin    │                     │       origin        │ pathname │     search     │ hash  │
├─────────────┴─────────────────────┴─────────────────────┴──────────┴────────────────┴───────┤
│                                            href                                             │
└─────────────────────────────────────────────────────────────────────────────────────────────┘

利用WHATWG API解析一个URL字符串:

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

在浏览器中,WHATWG URL在全局总是可用的,而在Node.js中,任何情况下打开 或使用一个链接都必须事先引用’url’模块:require('url').URL

通过Node.js提供的API解析一个URL:

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

url 模块为我们提供了一个url.URL类:

  • Class: URL
    • Constructor: new URL(string)
    • url.hash
    • url.host
    • url.hostname
    • url.href
    • url.origin
    • url.password
    • url.pathname
    • url.port
    • url.protocol
    • url.search
    • url.searchParams
    • url.username
    • url.toString()
    • url.toJSON()

url 模块还为我们提供了URLSearchParams类:

  • Class: URLSearchParams
    • Constructor: new URLSearchParams()
    • Constructor: new URLSearchParams(string)
    • Constructor: new URLSearchParams(obj)
      • obj 一个表示键值对集合的对象
    • Constructor: new URLSearchParams(iterable)
      • iterable 一个元素时键值对的迭代对象
    • urlSearchParams.append(name, value)
    • urlSearchParams.delete(name)
    • urlSearchParams.entries()
    • urlSearchParams.forEach(fn[, thisArg])
    • urlSearchParams.get(name)
    • urlSearchParams.getAll(name)
    • urlSearchParams.has(name)
    • urlSearchParams.keys()
    • urlSearchParams.set(name, value)
    • urlSearchParams.sort()
    • urlSearchParams.toString()
    • urlSearchParams.values()
    • urlSearchParams[@@iterator]()

其它方法

  • url.resolve(from, to)

    const url = require('url');
    url.resolve('/one/two/three', 'four');         // '/one/two/four'
    url.resolve('http://example.com/', '/one');    // 'http://example.com/one'
    url.resolve('http://example.com/one', '/two'); // 'http://example.com/two'
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值