官网: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 等,这些模块提供了丰富的功能,可以用于文件操作、网络通信、加密解密等,将在后续文章中详细介绍