当前位置: 首页 > news >正文

深入解析Node.js中的new URL()构造函数:功能、属性、方法与使用技巧

在Node.js中,new URL()构造函数是一个非常重要的工具,用于解析和构造URL。这个构造函数遵循WHATWG URL标准,提供了丰富的功能和更好的兼容性。然而,在使用new URL()时,需要注意它与Node.js内置url模块的关系,以及如何避免潜在的冲突。本文将深入全面地解析new URL()构造函数,包括其语法、属性、方法、与url模块的关系以及使用示例。

一、new URL()构造函数的语法

new URL()构造函数的语法非常简单,它只需要一个参数:要解析的URL字符串。可选地,还可以传递一个基础URL作为第二个参数,用于解析相对URL。

const myURL = new URL(urlString[, baseURL]);
  • urlString:要解析的URL字符串。
  • baseURL:可选参数,用于解析相对URL的基础URL。
二、new URL()构造函数的属性

new URL()构造函数解析URL后,会生成一个URL对象,该对象包含以下属性:

  • href:完整的URL字符串。
  • origin:URL的源,包括协议、主机名和端口(如果有的话)。
  • protocol:URL的协议,例如'http:''https:'
  • username:URL的用户名部分。
  • password:URL的密码部分。
  • host:URL的主机名,包括端口(如果有的话)。
  • hostname:URL的主机名,不包括端口。
  • port:URL的端口号。
  • pathname:URL的路径部分。
  • search:URL的查询参数部分,以'?'开头。
  • searchParams:一个URLSearchParams对象,用于处理查询参数。
  • hash:URL的哈希部分,以'#'开头。
三、new URL()构造函数的方法

虽然new URL()构造函数本身不是一个方法,但它创建的URL对象提供了以下方法:

  • toString():返回完整的URL字符串。
四、new URL()与Node.js内置url模块的关系

在Node.js中,除了全局的URL构造函数外,还有一个内置的url模块。这个模块提供了一些用于解析和构造URL的实用函数,如url.parse()url.format()。然而,这些函数与全局的URL构造函数在功能和API上有所不同。

重要的是要注意,当你使用const URL = require('url');这样的语句时,你实际上是将url模块赋值给了URL变量。这会覆盖全局的URL构造函数,导致你无法使用new URL(...)来创建URL对象。为了避免这个问题,你应该选择一个不同的变量名来引用url模块,比如urlModule

const urlModule = require('url');// 现在你可以使用 urlModule 来访问 url 模块的功能
const myParsedUrl = urlModule.parse('https://example.com');// 同时,你仍然可以使用全局的 URL 构造函数
const myURL = new URL('https://example.com');
五、使用示例

下面是一些使用new URL()构造函数的示例:

// 解析一个完整的URL
const myURL = new URL('https://example.com/path?query=123#hash');
console.log(myURL.href);          // 输出:https://example.com/path?query=123#hash
console.log(myURL.origin);        // 输出:https://example.com
console.log(myURL.protocol);      // 输出:https:
console.log(myURL.username);      // 输出:''(没有用户名)
console.log(myURL.password);      // 输出:''(没有密码)
console.log(myURL.host);          // 输出:example.com
console.log(myURL.hostname);      // 输出:example.com
console.log(myURL.port);          // 输出:''(没有指定端口)
console.log(myURL.pathname);      // 输出:/path
console.log(myURL.search);        // 输出:?query=123
console.log(myURL.searchParams.get('query')); // 输出:123
console.log(myURL.hash);          // 输出:#hash// 解析一个相对URL
const baseURL = 'https://example.com/base/';
const relativeURL = new URL('subpath?newQuery=456', baseURL);
console.log(relativeURL.href);    // 输出:https://example.com/base/subpath?newQuery=456// 修改URL的属性
myURL.pathname = '/newpath';
myURL.searchParams.set('newParam', '789');
console.log(myURL.href);          // 输出:https://example.com/newpath?query=123&newParam=789#hash
六、总结

new URL()构造函数是Node.js中处理URL的强大工具。它遵循WHATWG URL标准,提供了丰富的属性和方法来解析、构造和修改URL。在使用时,需要注意避免与Node.js内置的url模块发生冲突。通过选择合适的变量名来引用url模块,你可以同时使用url模块的功能和全局的URL构造函数。希望本文能帮助你更好地理解和使用new URL()构造函数。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenStack——keystone认证服务
  • Linux 流式DMA映射(DMA Streaming Mapping)
  • 【Qt笔记】QToolButton控件详解
  • 有哪些内部知识库类似钉钉,满足企业多样化需求?
  • 服务器(百度云)部署项目(jar包)
  • 基于spring Boot的网上报修平台的设计和实现---附源码94800
  • 深度学习学习经验——全连接神经网络(FCNN)
  • 国内外大模型汇总:Open AI大模型、Google大模型、Microsoft大模型、文心一言大模型、通义千问大模型、字节豆包大模型、智普清言大模型
  • Aiseesoft Data Recovery for Mac:专业级数据恢复解决方案
  • 淘宝API接口解析: item_fee获取淘宝商品运费接口
  • 动态代理和静态代理的区别,动态代理怎么提高网络安全性
  • vue中使用vue-video-player插件播放视频 以及 audio播放音频
  • 简单工作流(后端部分-spring boot,顺便优化了下ui)
  • 系统架构设计师——架构风格
  • 低成本、高精度电子计量解决方案
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【node学习】协程
  • 4个实用的微服务测试策略
  • 5、React组件事件详解
  • C# 免费离线人脸识别 2.0 Demo
  • Centos6.8 使用rpm安装mysql5.7
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Octave 入门
  • Puppeteer:浏览器控制器
  • Solarized Scheme
  • Spring框架之我见(三)——IOC、AOP
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 电商搜索引擎的架构设计和性能优化
  • 基于 Babel 的 npm 包最小化设置
  • 技术胖1-4季视频复习— (看视频笔记)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 我是如何设计 Upload 上传组件的
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 如何正确理解,内页权重高于首页?
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #pragma预处理命令
  • #QT(智能家居界面-界面切换)
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (55)MOS管专题--->(10)MOS管的封装
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (八)c52学习之旅-中断实验
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • .gitignore
  • .md即markdown文件的基本常用编写语法
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core 外观者设计模式 实现,多种支付选择