Node-3-node的核心模块一之path、os、url、queryString模块

284 阅读7分钟

Path模块

如何得知自己当前位置和目标文件的位置,这是作为对本地文件进行操作的基础。(后期做爬虫,可用于将爬取到的资源下载之后存放路径)

Path模块引进的是一个对象,内部有很多的属性和方法。

Path模块是什么.png

Path模块中的各种常用方法

path.join方法:用于连接路径,将多个路径拼接成一个路径。如下图所示,该方法的主要用途在于,会正确使用当前系统的路径分隔符,Unix系统是" / ",Windows系统是" \ "。

join方法拼接路径.png

__filename: 当前所执行的文件所在的目录名称+文件名称(绝对路径)。如下图所示:

__dirname: 当前所执行的文件所在的目录的绝对路径。如下图所示:

文件的绝对路径.png

path.resolve方法:用于拼接路径,将相对路径转为绝对路径。它可以接受多个参数,依次表示所要进入的路径,将一直连同到最后一个参数都转为绝对路径。如果根据参数无法得到绝对路径,就以当前所在路径作为基准。除了根目录,该方法的返回值都不带尾部的斜杠。如下图所示(下图中的注释应改为把多个地址拼接成一个地址,当初复制上行注释忘了改):

resolve方法拼接路径.png

path.relative方法:用于拼接路径,接受两个参数,这两个参数都应该是绝对路径。该方法返回第二个路径相对于第一个路径的那个相对路径。如下图所示:

relative方法拼接路径.png

path.joinpath.resolvepath.relative三者的区别与使用场景:

如果只是简单的想要路径拼接,用path.join

如果想要拼接后得到绝对路径,用path.resolve

如果想要拼接后得到相对路径,用path.relative

path.parse()方法:对某一个目录或路径做解析,解析结果是一个对象,可以返回路径各部分的信息(其中后缀名ext和文件名name经常用于做判断,很重要)。如下图所示:

parse方法解析.png

Path模块中的其他方法(了解即可)

basename(path):path.basename(“pathaddr”,”filtterString”) 方法返回 path 的最后一部分(filename下就是文件名字+后缀名, dirname下就是文件所在的最后一个层级的目录名)

delimiter:提供不同平台特定的路径定界符

dirname(path):返回”pathaddr”的目录名称

extname(path):返回 path 的扩展名,从最后一次出现 .(句点)字符到 path 最后一部分的字符串结束。 如果在 path 的最后一部分中没有 . ,或者如果 path 的基本名称(参阅 path.basename())除了第一个字符以外没有 .,则返回空字符串。

format(pathObject): 方法从对象返回路径字符串。 与 path.parse() 相反。

isAbsolute(path):检测一个路径是否是绝对路径,如果path是个空string,则返回false

normalize(path):规范化给定的 path,解析 '..' 和 '.' 片段。当找到多个连续的路径段分隔字符时(\),则它们将被替换为单个平台特定的路径段分隔符(\)。 尾部的分隔符会保留。如果 path 是零长度的字符串,则返回 '.',表示当前工作目录。

OS模块(了解)

os模块提供与操作系统相关的方法。如下图所示:

OS模块是什么.png

OS模块的属性与方法

os.EOL属性是一个常量,返回当前操作系统的换行符(Windows系统是\r\n,其他系统是\n),记住,这个换行符是不可见的,咱们看到的就是个效果,如下图所示:

os的EOL属性.png

os.arch方法:返回当前计算机的架构。现在可能的值有:'arm''arm64''ia32''mips''mipsel''ppc''ppc64''s390''s390x''x32''x64'。如下图所示:

os的arch方法.png

os.networkInterfaces() 方法:返回一个对象,包含只有被赋予网络地址的网络接口。如下两图(内容太多截两图)所示:

os的network方法1.png

os的network方法2.png

被赋予网络地址的对象包含的属性有(了解即可):

address <string> 被赋予的 IPv4 或 IPv6 地址。

netmask <string> IPv4 或 IPv6 子网掩码。

family <string> IPv4 或 IPv6。

mac <string> 网络接口的 MAC 地址。

internal <boolean> 如果网络接口是 loopback 或相似的远程不能用的接口时,值为 true,否则为 false。

scopeid <number> IPv6 数字领域识别码(只有当 family 是 IPv6 时可用)。

cidr <string> 以 CIDR 表示法分配的带有路由前缀的 IPv4 或 IPv6 地址。如果 netmask 参数不可用,则该属性是 null。

OS模块之其他有趣的接口

platform():返回一个字符串,指定 Node.js 编译时的操作系统平台

release():返回一个操作系统的版本号

cpus():返回一个逻辑CPU内核的信息

URL模块

url模块用于生成和解析URL。该模块使用前,必须加载。

url模块.png

如上图所示:

url 模块提供了两套 API 来处理 URL:一个是旧版本遗留的API,一个是实现了WHATWG标准的新API旧api就是url.parse里面的部分 新api就是URL里面的部分

建议只使用新API,如下图所示:

url模块的新API.png

URL模块之url解析

使用方法:new URL(input, base),可接收两个参数,不过一般直接new URL(要解析的url地址)

input <string> 要解析的绝对或相对的 URL路径。如果 input 是相对路径,则需要 base。 如果 input 是绝对路径,则忽略 base。

base <string> | <URL> 如果 input 不是绝对路径,则为要解析的基本 URL。

url解析.png

hash:获取及设置 URL 的片段部分。分配给 hash 属性的值中包含的无效 URL 字符是百分比编码的

host:获取及设置 URL 的主机部分。(也就是域名加端口部分)

url.hostname:获取及设置 URL 的主机名部分。 url.host 和 url.hostname 之间的区别是 url.hostname 不包含端口

href:获取及设置序列化的 URL。获取 href 属性的值等同于调用 url.toString()。将此属性的值设置为新值等同于使用 new URL(value) 创建新的URL对象。 URL 对象的每个属性都将被修改。如果给 href 属性设置的值是无效的 URL,则将会抛出 TypeError。

origin:包含了协议的host, 获取只读的序列化的 URL 的 origin。

port:端口获取及设置 URL 的端口部分。端口值可以是数字或包含 0 到 65535(含)范围内的数字字符串.端口可以是空字符串的,这时端口就会自动根据协议来选取

protocol:设置连接协议, 无效协议值会被忽略. 比如http或是https

search:获取及设置 URL 的序列化查询部分。

searchParams:获取表示 URL 查询参数的 URLSearchParams 对象。 该属性是只读的。 使用 url.search 设置来替换 URL 的整个查询参数

queryString模块

querystring模块主要用来解析查询字符串。

queryString模块.png

queryString模块的常用方法

querystring.parse()方法用于将一个查询字符串解析为 JavaScript 对象。

parse方法一共可以接受四个参数:querystring.parse(str,sep,eq,options)

str:需要解析的查询字符串

sep:多个键值对之间的分隔符,默认为&

eq:键名与键值之间的分隔符,默认为=

options:配置对象,它有两个属性,decodeURIComponent属性是一个函数,用来将编码后的字符串还原,默认是querystring.unescape(),默认情况下,将假定查询字符串中的百分比编码字符使用 UTF-8 编码。 如果使用其他字符编码,则需要指定其他值; maxKeys属性指定最多解析多少个属性,默认是1000,如果设为0就表示不限制属性的最大数量。

例如我们在百度的搜索框输入:日向坂46。

日向坂46.png

在地址栏会得到一长串字符串:

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&srcqid=5242299911359639549&tn=50000021_hao_pg&wd=%E6%97%A5%E5%90%91%E5%9D%8246&oq=%25E7%25BE%258E%25E5%25B0%2591%25E5%25A5%25B3&rsv_pq=ca6dae6400172c40&rsv_t=623bfQGKDG%2FFpLdGBRROPunIGoLMXqmAef8tfk0bCuArG1Q8UnN4BuCMZI4ms%2F472YBuDP%2BI&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_btype=t&inputT=8720&rsv_sug3=13&rsv_sug1=4&rsv_sug7=101&rsv_sug2=0&rsv_sug4=9517

我们将https://www.baidu.com/s?之后的部分截取出来,传入querystring.parse()方法,并打印输出,就会得到一个对象,内部以名值对的形式存储数据,如下图所示:

queryString的parse方法解析字符串·.png

queryString.stringify()方法:该方法可以理解为是parse的逆向方法,作用就是把一个对象改成一个查询字符串( 比如本地经过一番操作,确定了一组数据,现在要把数据组合成一个请求连接, 那么就需要这个操作了 )

queryString.stringify()方法一共可以接受四个参数:

querystring.stringify(obj, sep, eq, options)

obj:需要组合的目标对象

sep:多个键值对之间的分隔符,默认为&

eq:键名与键值之间的分隔符,默认为=

options:配置对象,它有两个属性,encodeURIComponent:在查询字符串中将 URL 不安全字符转换为百分比编码时使用的函数, 默认就是querystring.escape()

例如我们使用queryString.stringify()方法将数据组合成一个请求连接,如下图所示:

queryString的stringify方法.png

path、url、queryString的区别

path用来解析本地路径

url用来解析网络路径

queryString用来解析字符串