Node【六】内置模块 【url模块与queryString】

news2025/3/12 19:33:43

文章目录

  • 🌟前言
  • 🌟url 模块
    • 🌟 URL各部分说明
    • 🌟 将URL字符串转换为对象
    • 🌟 将对象格式化为URL字符串:url.format(urlObj)
    • 🌟 URL路径处理:url.resolve(from, to)
  • 🌟 queryString 模块
    • 🌟 stringify
    • 🌟 parse
  • 🌟写在最后

在这里插入图片描述

🌟前言

哈喽小伙伴们,新的专栏 Node 已开启;这个专栏里边会收录一些Node的基础知识和项目实战;今天我们开始这个专栏的第六篇文章,带领大家初识一下 Node内置模块 url 模块与 queryString ;让我们一起来看看吧🤘

🌟url 模块

该url模块提供了URL解析和分析工具。它可以使用:

var url = require('url');

🌟 URL各部分说明

┌─────────────────────────────────────────────────────────────────────────────────────────────┐
│                                            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                                             │
└─────────────────────────────────────────────────────────────────────────────────────────────┘

对于一个 URL 字符串,其组成部分会有所有不同,其中有些部分只有在URL字符串中存在时,对应字段才会出现在解析后对象中。以下是一个 URL 例子:

http://user:pass@host.com:8080/p/a/t/h?query=string#hash

解析后对象字段如下:

参数描述示例
href解析前的完整原始 URL,协议名和主机名已转为小写http://user:pass@host.com:8080/p/a/t/h?query=string#hash
protocol请求协议,小写http:
slashes协议的":“号后是否有”/"true or false
hostURL主机名,包括端口信息,小写‘host.com:8080’
authURL中的认证信息‘user:pass’
hostname主机名,小写‘host.com’
port主机的端口号‘8080’
pathnameURL中路径‘/p/a/t/h’
search查询对象,即:queryString,包括之前的问号“?”‘?query=string’
pathpathname 和 search的合集‘/p/a/t/h?query=string’
query查询字符串中的参数部分(问号后面部分字符串)‘query=string’ or {‘query’:‘string’}
hash锚点部分(即:“#”及其后的部分)‘#hash’

🌟 将URL字符串转换为对象

url.parse(urlStr[, parseQueryString][, slashesDenoteHost])

url.parse()方法用于解析URL对象,解析后返回一个JSON对象。示例如下:

var url = require('url');
var urlString = 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash';
var result = url.parse(urlString);
console.log(result);
# 输出结果如下
{ protocol: 'http:',
  slashes: true,
  auth: 'user:pass',
  host: 'host.com:8080',
  port: '8080',
  hostname: 'host.com',
  hash: '#hash',
  search: '?query=string',
  query: 'query=string',
  pathname: '/p/a/t/h',
  path: '/p/a/t/h?query=string',
  href: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'
}

第二个可选参数设置为true时,会使用querystring模块来解析URL中德查询字符串部分,默认为 false。

var result = url.parse(urlString,true);
输出结果如下
{ protocol: 'http:',
  slashes: true,
  auth: 'user:pass',
  host: 'host.com:8080',
  port: '8080',
  hostname: 'host.com',
  hash: '#hash',
  search: '?query=string',
  query: {query:"string"},
  pathname: '/p/a/t/h',
  path: '/p/a/t/h?query=string',
  href: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'
}

第三个可参数设置为 true时,会把诸如 //foo/bar 这样的URL解析为 { host: 'foo', pathname: '/bar' } 而不是 { pathname: '//foo/bar' }。 默认为 false。

🌟 将对象格式化为URL字符串:url.format(urlObj)

url.resolve()用于格式化URL对象。输入一个 URL 对象,返回格式化后的 URL 字符串。示例如下:

var url = require('url');

var urlObj = {
  protocol: 'http:',
    slashes: true,
    hostname: 'itbilu.com',
    port: 80,
    hash: '#hash',
    search: '?query=string',
    path: '/nodejs?query=string'
}
var result = url.format(urlObj);
console.log(result);

输出结果如下

http://itbilu.com:80?query=string#hash
/*
*传入的URL对象会做以下处理:
*
*href 属性会被忽略
*protocol无论是否有末尾的 : (冒号),会同样的处理
*这些协议包括 http, https, ftp, gopher, file 后缀是 :// (冒号-斜杠-斜杠).
*所有其他的协议如 mailto, xmpp, aim, sftp, foo, 等 会加上后缀 : (冒号)
*auth 如果有将会出现.
*hostname 如果 host 属性没被定义,则会使用此属性.
*port 如果 host 属性没被定义,则会使用此属性.
*host 优先使用,将会替代 hostname 和port
*pathname 将会同样处理无论结尾是否有/ (斜杠)
*search 将会替代 query属性
*query (object类型; 详细请看 querystring) 如果没有 search,将会使用此属性.
*search 无论前面是否有 ? (问号),都会同样的处理
*hash无论前面是否有# (井号, 锚点),都会同样处理
*/

🌟 URL路径处理:url.resolve(from, to)

url.resolve()方法用于处理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'

🌟 queryString 模块

查询字符串主要由两个方法和内置格式化方法组成,一个是将对象转换为字符串,一个则是相反,将字符串转换为对象:

方法描述
querystring.stringify(obj, [sep], [eq])将JSON对象格式化为查询字符串格式的字符串
querystring.parse(str, [sep], [eq], [options])根据“&”和“=”将字符串进行分割,反序列化为JSON对象

🌟 stringify

将JSON对象格式化为查询字符串格式的字符串,默认的分隔符为:“&”和“=”,具体可以看一下以下代码:

querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' })

// returns
'foo=bar&baz=qux&baz=quux&corge='
querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':')
// returns
'foo:bar;baz:qux'

🌟 parse

根据“&”和“=”将字符串进行分割,反序列化为JSON对象,而options包含的maxKeys默认设置为1000,如果将其设置为0则表示没这个限制。

querystring.parse('foo=bar&baz=qux&baz=quux&corge')

// returns
{ foo: 'bar', baz: ['qux', 'quux'], corge: '' }

🌟写在最后

更多Node知识以及API请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发

背景 Dapr 是一个开源的分布式应用运行时,帮助开发者构建松耦合的分布式应用程序,具有良好的可扩展性和可维护性。Rainbond 是一款企业级的云原生应用管理平台,提供了丰富的功能和工具,方便开发者管理和部署应用。Rainbond 和 Da…

如何通过 kubernetes ingress 或者 istio ingressgateway 来暴露 TCP 的服务

点击上方“程序猿技术大咖”,关注并选择“设为星标”回复“加群”获取入群讨论资格!在 kubernetes 或 istio 应用中,一般都是通过 kubernetes ingress 或者 istio ingressgateway 来暴露 HTTP/HTTPS 的服务。但是在实际应用中,还是…

纷享销客张睿:快消数字化新时代,数“智”引领新增长

4月6日,在2023年(第八届)中国快消品创新大会主论坛上,纷享销客经营副总裁兼快消行业部总经理张睿作为嘉宾出席,并以《快消数字化新时代,数“智”引领新增长》为题发表了演讲。他有20余年的市场营销、销售及…

【蓝桥杯省赛真题37】Scratch冰上滑行 少儿编程scratch编程蓝桥杯省赛比赛真题讲解

目录 scratch冰上滑行 一、题目要求 编程实现 二、案例分析 1、角色分析

JUC源码系列-ReentrantReadWriteLock

继承关系 ReadLock和WriteLock是ReentrantReadWriteLock的两个内部类,Lock的上锁和释放锁都是通过AQS来实现的。 AQS定义了独占模式的acquire()和release()方法,共享模式的acquireShared()和releaseShared()方法。 还定义了抽象方法tryAcquire()、tryA…

男生|女生漫画头像怎么制作,分享3种免费制作方法,不用求人

大家发现没有,最近特别流行卡通漫画头像!一些小伙伴们通过处理自己的照片,把照片制作成漫画头像,让照片看起来更有趣。那么,男生、女生漫画头像怎么制作呢?需要用到哪些工具?今天给大家分享3种免费制作漫画…

数据结构之线性表3

我们的目标: 1、了解线性结构的特点 掌握顺序表的定义、查找、插入和删除。 2、掌握链表的定义、创建、查找、插入和删除。 3、能够从时间和空间复杂度的角度比较两种存储结构的不同特点及其适用场合。(持续更新) 前言 本章节内容主要介绍…

linux服务器怎么搭建网站

linux服务器怎么搭建网站 我是艾西,今天又是和想学习linux系统的小伙伴分享服务器系统操作小知识的时间。 这篇文章艾西会告诉大家怎么用linux系统搭建网站,网站是一个展示页面,用于商业的公告栏、门面以及用户容易记住的点,通过…

SpringSecurity中用户表单登录验证源码分析

SpringSecurity简单介绍 Spring Security所解决的问题就是安全访问控制,安全访问控制功能其实就是对所有进入系统的请求进行拦截,校验每个请求是否能够访问它所期望的资源。通过学习SpringMVC我们得知只有进入Controller的请求才会走拦截器(Interceptor)…

LOL自动走A和释放技能原理及安全防护

走A和自动释放技能并不什么变态功能,他的一切操作都是符合常理的, 但是在经过合理的逻辑代码编写后, 利用读取内存数据,快速执行和判断, 实现的功能却是超出大部分玩家的。 也就是说用这个功能,可以弥补…

Spring Security实战(二)—— 实现图形验证码

目录 一. 使用过滤器实现图形验证码 1. 自定义过滤器 2. 图形验证码过滤器 (1)引入kaptcha依赖 (2)配置一个 kaptcha 实例 (3)创建一个CaptchaController,用于获取图形验证码 &#xff08…

[论文速览] Sparks of Artificial General Intelligence: Early experiments with GPT-4

Sparks of Artificial General Intelligence: Early experiments with GPT-4 2023.3.22 微软官方发布了目前人类史上最强AI模型 GPT-4 的综合能力评估论文,总所周知,2023年是通用人工智能(Artificial General Intelligence,AGI&a…

18从零开始学Java之switch分支语句中该怎么用?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中,壹哥给大家介绍了Java里的顺序、分支、循环结构的概念,并且重点给大家讲解了分支结…

WebSocket和Socket编程

面试一般会问 socket原理 socket为啥要有端口:确定一个链路的是一个四元组 Socket编程 socket通信 你做过socket编程吗,socket是怎么实现知道有连接过来的 说说WebSocket与socket的区别 先谈谈Websocket与Socket的区别 首先Socket 不属于协议范畴 &a…

处理用户输入

shell脚本编程系列 传递参数 向shell脚本传递数据的最简单方法是使用命令行参数 比如 ./add 10 30读取参数 bash shell会将所有的命令行参数都指派给位置参数的特殊变量。其中$0对应脚本名、$1是第一个参数、$2是第二个参数,依次类推,直到$9 #!/bin/b…

Unity3D打包WebGL并使用MQTT(二):使用json

Unity3D打包WebGL并使用MQTT(二):使用json 1. 软件环境 Unity: 2021.3stomp.js 2.3.3: 下载地址:https://www.jsdelivr.com/package/npm/stompjs 2. 内容介绍 这篇博客的主要内容是记录将一个Unity项目打包成WebGL项目,并集成MQTT进行json数据传输的过程。 3. …

〖Python网络爬虫实战⑬〗- XPATH实战案例

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费…

一篇文章理解堆栈溢出

一篇文章理解堆栈溢出引言栈溢出ret2text答案ret2shellcode答案ret2syscall答案栈迁移答案堆溢出 unlink - UAF堆结构小提示向前合并/向后合并堆溢出题答案引言 让新手快速理解堆栈溢出,尽可能写的简单一些。 栈溢出 代码执行到进入函数之前都会记录返回地址到SP…

wsl区分和切换,安装NVIDIA驱动+cuda+ffmpeg

wsl区分和切换,安装NVIDIA驱动cudaffmpeg 安装Nvidia驱动 打开terminal wsl --update进入wsl nvidia-smi网上找了一些博客,获取信息: window安装好驱动即可wsl有1和2 我的win10已经安装了驱动 wsl1和wsl怎么区分?切换 区分…

实时聊天提示的最佳做法

本文将教您更多关于有效的实时聊天功能对您的品牌的重要性,以及您可以使用的一些最佳实践来确保您的实时聊天功能尽可能好。实时聊天提示是为您的网站访问者显示的自动聊天消息。在SaleSmartly(ss客服)中,如您将聊天插件安装到您的…