path模块提供了用于处理文件和目录路径,url模块提供用于 URL 解析,URLSearchParamsAPI 提供对URL参数的解析处理。

Path模块

  • dirname(path):返回path路径的目录字符串。
  • extname(path):返回path路径的扩展名。如果path包含.字符,则返回从.字符到path末尾的字符串内容,如果path不包含.字符,则返回一个空字符串。
  • isAbsolute(path):返回一个布尔值,用于判断path是否是绝对路径。
  • path.join([…paths]):返回使用特定于平台的分隔符作为分隔符将所有给定的path连接在一起的字符串。
  • parse(path):解析path路径返回一个包含root(path根目录)、base(path基础路径)、dir(path目录)、name(path文件名)、ext(path文件扩展名)属性的对象。
  • path.relative(from,to):返回form路径到to路径的相对路径。
  • path.resolve([…paths]):将一个或多个路径解析为绝对路径。给定的路径序列是从右到左处理的,每个后续path路径都在前面,直到构造出绝对路径。如果在处理完所有给定path的段之后,还没有生成绝对路径,则使用当前工作目录。如果没有path path.resolve()将返回当前工作目录的绝对路径。 ```javascript const path = require(‘path’);

const { log } = console;

/**

  • dirname(path)用于返回path路径的目录。 */ const dir = path.dirname(“/Users/study/nodeJS/src/index.js”); log(dir); // /Users/study/nodeJS/src

/**

  • extname(name):返回path路径的扩展名。如果path包含.字符,则返回从.字符到
  • path末尾的字符串内容,如果path不包含.字符,则返回一个空字符串。 */ log(path.extname(‘src/index.md’)); // ‘.md’ log(path.extname(‘src/index.’)); // ‘.’ log(path.extname(‘index’)); // ‘’

/**

  • isAbsolute(path)用于检查path是否是绝对路径 */ log(path.isAbsolute(‘/foo/bar’)); // true log(path.isAbsolute(‘./index.js’)); // false log(path.isAbsolute(‘index.js’)); // false log(path.isAbsolute(‘’)); // false

/**

  • join([…paths]):返回使用特定于平台的分隔符作为分隔符
  • 将所有给定的path连接在一起的字符串。 */ log(path.join(‘/foo’, ‘bar’, ‘index.js’)); // /foo/bar/index.js

/**

  • parse(path)解析path路径返回一个包含root(path根目录)、base(path基础路径)、
  • dir(path目录)、name(path文件名)、ext(path文件扩展名)属性的对象。
  • 输出:{root:’/‘,dir:’/foo/bar’,base:’index.js’,ext:’.js’,name:’index’} */ log(path.parse(“/foo/bar/index.js”));

/**

  • relative(from,to)返回from到to的相对路径 */ log(path.relative(‘/foo/index.js’, ‘/foo/src/pages’)); // ../src/pages

/**

  • resolve([…paths]):将一个或多个路径解析为绝对路径。
  • 给定的路径序列是从右到左处理的,每个后续path路径都在前面,直到构造出绝对路径 */ log(path.resolve(‘/foo/bar’, ‘./baz’)); // /foo/bar/baz log(path.resolve(‘/foo/bar’, ‘/tmp/file/‘)); // /tmp/file // 解析后仍无法构造出绝对路径,则使用当前工作目录拼接 // /Users/study/nodeJS/nodeJS-example/src/path/wwwroot/static_files/gif/image.gif log(path.resolve(‘wwwroot’, ‘static_files/png/‘, ‘../gif/image.gif’)) ```

    URL模块

  • new URL(input[, base]):构造一个URL对象。URL解析input相对于base,如果 base作为字符串传递,它将被解析为等价于new URL(base)。URL来源于全局对象和url模块。
    • input :要解析的绝对或相对输入 URL。如果input 是相对的,那么base是必需的。如果input是绝对的,base 则可以忽略。
    • base <字符串> | input如果不是绝对的,则要解析的基本 URL 。
  • hash:获取URL hash部分,也就是url路径 #号和#号后的内容。
  • host:用于获取和设置URL主机。
  • hostname:用于获取和设置URL主机名。host和hostname之间的主要区别在于 url.hostname包括端口。
  • href:获取和设置序列化的 URL的完整路径。等同于调用url.toString()。
  • origin:获取 URL 源的只读序列化。
  • pathname:获取和设置 URL 的路径部分。
  • port:获取和设置 URL 的端口部分。ftp协议默认端口是21、http协议默认端口是8080、https协议默认端口是443、ws协议默认端口是80、wss协议默认端口是443。
  • protocol:获取和设置 URL 的协议部分。
  • password:获取和设置 URL 的密码部分。
  • search:获取和设置 URL 的序列化查询部分。即URL中?号和?号后面的内容。
  • searchParams:获取URLSearchParams表示 URL 的查询参数的对象。
  • username:获取和设置 URL 的用户名部分。
  • toString():返回URL对象上的toString()方法序列化的 URL。返回的值等价于url.href 和 url.toJSON()。
  • toJSON():返回URL对象上的toJSON()方法序列化的 URL。返回的值等价于url.href 和 url.toString()。
  • createObjectURL(blob):根据Blob对象创建一个’blob:nodedata:’形式的URL字符串。
  • revokeObjectURL:根据createObjectURL创建的’blob:nodedata:’形式的URL字符串,删除存储的Blob对象。 ```javascript

const { Blob, resolveObjectURL, } = require(‘buffer’);

const url = new URL(‘/foo?abc=xyz#haha’, ‘https://abc:111@example.org:8888‘) console.log(url); /**

  • { // url完整路径 href: ‘https://abc:111@example.org:8888/foo?abc=xyz#haha‘, // url源 origin: ‘https://example.org:8888‘, // url协议 protocol: ‘https:’, // url用户名 username: ‘abc’, // url密码 password: ‘111’, // url主机 host: ‘example.org:8888’, // url主机名 hostname: ‘example.org’, // url端口 port: ‘8888’, // url路径 pathname: ‘/foo’, // url查询参数 search: ‘?abc=xyz’, // url查询参数对象 searchParams: URLSearchParams { ‘abc’ => ‘xyz’ }, // url hash部分 hash: ‘#haha’ } */

// toString()、toJSON、href都会返回序列化后的完整路径 console.log(url.toString()); // https://abc:111@example.org:8888/foo?abc=xyz#haha console.log(url.toJSON()); // https://abc:111@example.org:8888/foo?abc=xyz#haha

/**

  • createObjectURL:根据Blob对象创建一个’blob:nodedata:’形式的URL字符串。
  • revokeObjectURL:根据createObjectURL创建的’blob:nodedata:’形式的URL字符串,
  • 删除存储的Blob对象。 */ const blob = new Blob([‘hello’]); const id = URL.createObjectURL(blob); console.log(id); // blob:nodedata:1c851dfd-08c0-4498-bc69-299375669548 console.log(resolveObjectURL(id).size); // 5 console.log(URL.revokeObjectURL(id)); console.log(resolveObjectURL(id)); // undefined ```

    URLSearchParams对象

    new URLSerchParams(string):将 解析string为查询字符串,并使用它来实例化一个新 URLSearchParams对象。如果string存在?号则将被忽略。 ```javascript /**
  • searchParams如下Api:
  • has用于判断searchParams是否存在某个属性。
  • set用于设置searchParams的属性和值。
  • sort用于进行排序
  • get根据属性名获取对应值
  • getAll根据属性返回一个包含值的数组
  • delete:根据属性名删除属性
  • key:根据所有key返回一个 ES6 Iterator
  • values:根据所有value返回一个 ES6 Iterator
  • entries:根据所有key和value返回返回一个 ES6 Iterator */ const searchParams = url.searchParams console.log(searchParams.has(“abc”)); // true console.log(searchParams.set(“a”, 123)); // undefined console.log(searchParams.get(“a”)); // 123 console.log(searchParams.getAll(“a”)); searchParams.sort() console.log(searchParams.values()); console.log(searchParams.keys()); console.log(searchParams.get(“abc”)); ```