Node常用内置模块介绍(OS/path/URL/util)

151 阅读4分钟

官网:nodejs.org

Node.js 提供了一系列内置模块,这些模块提供了许多常用的功能。内置模块无需额外安装,直接可以在代码中引入使用。本文将介绍几个常用的 Node.js 内置模块及其常见方法。

OS

操作系统相关

OS | Node.js v12.22.12 Documentation

cpus()

返回一个有关每个逻辑 CPU 核心的信息的对象数组。

返回示例:

[
  {
    model: '13th Gen Intel(R) Core(TM) i5-13400',
    speed: 2496,
    times: { user: 740843, nice: 0, sys: 599343, idle: 5239156, irq: 30531 }
  },
  {
    model: '13th Gen Intel(R) Core(TM) i5-13400',
    speed: 2496,
    times: { user: 57390, nice: 0, sys: 50843, idle: 6471109, irq: 578 }
  },
  ...
]

tmpdir()

返回临时文件的操作系统默认目录字符串

'C:\Users\XXX\AppData\Local\Temp';

path

路径相关

path | Node.js v12.22.12 Documentation

resolve()

将一个或多个路径片段解析为一个绝对路径

path.resolve([from ...], to)
  • from:可选的一个或多个路径片段,表示起始路径。如果没有提供,则默认从当前工作目录(process.cwd())开始。
  • to:必选的路径片段,表示最终需要解析为绝对路径的目标。
const path = require('path');

console.log(path.resolve('/foo/bar', './baz'));
// 输出:/foo/bar/baz '/foo/bar'是绝对路径,'./baz'是相对路径,所以直接拼接

// 假设当前工作目录为:/Users/YJX/project

console.log(path.resolve('foo', 'bar'));
// 输出:/Users/YJX/project/foo/bar 'foo' 是相对路径,没有以 / 开头,因此它会被解析为相对于当前工作目录的路径。

console.log(path.resolve('/a.js'));
// 输出:C:\a.js  (Windows 系统中)'/a.js'是相对于 C:/ 盘符的路径

console.log(path.resolve('foo', '/bar'));
// 输出:/bar (因为 /bar 是绝对路径,直接替代了前面的 foo)

更多情况下,path.resolve()会结合__dirname 使用。

__dirname 表示当前模块文件所在的目录路径,适用于构建绝对路径,避免路径依赖于工作目录。

const path = require('path');

// 假设在 D:\Users\YJX\project 目录下执行以下代码:
console.log(path.resolve(__dirname, './a.js'));
// 输出:D:\Users\YJX\project\a.js

baseName()

用来提取路径中最后一部分的文件名或目录名的工具。

可以选择性地去掉文件名的扩展名,便于进一步处理文件名部分。

path.basename('/foo/bar/baz/asdf/quux.html');
// 'quux.html'

path.basename('/foo/bar/baz/asdf/quux.html', '.html');
//  'quux'

path.basename('/user/local/bin/');
// 'bin'

path.basename('/user/local/bin/', '/');
// 'bin'

dirname()

返回路径的目录名

path.dirname('/foo/bar/baz/asdf/quux');
//  '/foo/bar/baz/asdf'

extName()

返回路径的拓展名

path.extname('/foo/bar/baz/asdf/quux.html');
// '.html'

path.extname('index.coffee.md');
// '.md'

join()

将所有给定的 path 片段连接在一起:path.join([...paths])

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// Returns: '/foo/bar/baz/asdf'

URL

URL 模块用于处理和解析 URL。

URL | Node.js v12.22.12 Documentation

URL 类

URL 类的构造函数可以接受一个字符串参数,用于解析 URL。

const { URL } = require('url');

const url = new URL('https://nodejs.org:80/a/b/c?a=1&b=2#abc');

console.log(url);
/**
 URL {
  href: 'https://nodejs.org:80/a/b/c?a=1&b=2#abc', // 完整的 URL 字符串
  origin: 'https://nodejs.org:80',
  protocol: 'https:',
  username: '',
  password: '',
  host: 'nodejs.org:80',
  hostname: 'nodejs.org', // 主机名
  port: '80',
  pathname: '/a/b/c', // 路径部分
  search: '?a=1&b=2', // 查询参数部分
  searchParams: URLSearchParams { 'a' => '1', 'b' => '2' },
  hash: '#abc'
}
 */

注:url.parse()、url.format()、url.resolve() 均已废弃,可以使用 URL 类的实例方法替代。

URLSearchParams 类

URLSearchParams 是一个用于处理 URL 查询字符串的类,与浏览器中的 URLSearchParams API 类似。

const { URLSearchParams } = require('url');

const params = new URLSearchParams('?name=John&age=30');

// 添加新参数
params.append('city', 'New York');

// 更新已有参数
params.set('age', '31');

// 删除参数
params.delete('name');

// 判断参数是否存在
if (params.has('age')) {
	console.log('Age is present');
}

// 输出修改后的查询字符串
console.log(params.toString()); // 输出: 'age=31&city=New York'

util

util 模块提供了一些实用工具函数,用于处理对象、字符串、数组等。

util | Node.js v12.22.12 Documentation

util 常用的方法比较多,所以这里不作详细介绍,具体可以参考官方文档。

util.inspect() : 将对象转换为字符串,便于调试和日志记录。 util.format(): 格式化字符串。 util.deprecate():标记某个函数为废弃的,并在调用时发出警告。可以用于在某个功能被弃用时提醒使用者。 util.types:包含一些用于检查类型的工具函数。例如,isPromise()、isRegExp()、isDate() 等 util.isDeepStrictEqual():用于判断两个值是否深度严格相等(比较每个属性和它们的值)。

util.promisify():将一个遵循回调风格的函数转换为返回 Promise 的函数。

const util = require('util');

function delayCallBack(duration, callback) {
	setTimeout(() => {
		callback(null, duration);
	}, duration);
}

const delay = util.promisify(delayCallBack);

delay(500).then((d) => {
	console.log(d);
});

util.callbackify() 将返回 Promise 的函数转换为基于回调的函数。

const util = require('util');
// 一个正常的异步函数
async function delay(duration = 1000) {
	return new Promise((resolve) => {
		setTimeout(() => {
			resolve(duration);
		}, duration);
	});
}

delay(500).then((d) => {
	console.log(d);
});

// 转为callback
const delayCallback = util.callbackify(delay); // callbackify实质上是返回一个高阶函数

delayCallback(500, (err, d) => {
	console.log(d);
});

小结

本文介绍了 Node.js 常用的基本内置模块,这些比较简单所以总结在这篇文章中。 Node.js 还有很多其他的内置模块,如 fs、http、https、net 等,这些模块提供了丰富的功能,可以用于文件操作、网络通信、加密解密等,将在后续文章中详细介绍