Node.js API 速览
文档介绍
本文档提供了 Node.js 18+ LTS 版本核心模块的全面 API 参考,旨在帮助开发者快速掌握 Node.js 的核心功能和最佳实践。文档涵盖了文件系统、网络、加密、流等关键模块,并提供了详细的 API 说明和实际使用案例。
模块索引
- 文件系统 (fs)
- 路径处理 (path)
- HTTP 服务器/客户端 (http/https)
- 事件机制 (events)
- 流操作 (stream)
- 二进制数据 (buffer)
- 加密功能 (crypto)
- 工具函数 (util)
- 子进程 (child_process)
- 系统信息 (os)
- 网络基础 (net)
- URL 处理 (url)
- 查询字符串 (querystring)
- 断言测试 (assert)
- 集群管理 (cluster)
文件系统 (fs)
模块概述
fs 模块提供了用于与文件系统交互的 API,可以执行文件的读写、创建、删除、重命名等操作。Node.js 18+ 提供了回调式、Promise 式和同步式三种 API 风格。
核心 API
1. 异步文件读取
const fs = require('fs/promises');
async function readFileExample() {
try {
// 读取文件内容
const data = await fs.readFile('example.txt', 'utf8');
console.log('文件内容:', data);
} catch (error) {
console.error('读取文件失败:', error);
}
}
readFileExample();
2. 异步文件写入
const fs = require('fs/promises');
async function writeFileExample() {
try {
// 写入文件内容
await fs.writeFile('example.txt', 'Hello, Node.js!', 'utf8');
console.log('文件写入成功');
} catch (error) {
console.error('写入文件失败:', error);
}
}
writeFileExample();
3. 创建目录
const fs = require('fs/promises');
async function mkdirExample() {
try {
// 创建目录,支持递归创建
await fs.mkdir('new-directory', { recursive: true });
console.log('目录创建成功');
} catch (error) {
console.error('创建目录失败:', error);
}
}
mkdirExample();
4. 文件状态检查
const fs = require('fs/promises');
async function statExample() {
try {
const stats = await fs.stat('example.txt');
console.log('文件大小:', stats.size);
console.log('是否为文件:', stats.isFile());
console.log('是否为目录:', stats.isDirectory());
console.log('创建时间:', stats.birthtime);
console.log('修改时间:', stats.mtime);
} catch (error) {
console.error('获取文件状态失败:', error);
}
}
statExample();
路径处理 (path)
模块概述
path 模块提供了用于处理文件路径和目录路径的实用工具。它可以跨平台工作,自动处理不同操作系统的路径分隔符差异。
核心 API
1. 路径拼接
const path = require('path');
// 拼接路径片段
const fullPath = path.join(__dirname, 'files', 'example.txt');
console.log('完整路径:', fullPath);
// 输出: /当前目录/files/example.txt
2. 获取文件名
const path = require('path');
const filePath = '/usr/local/bin/node';
// 获取完整文件名
console.log('文件名:', path.basename(filePath)); // 输出: node
// 获取文件名(不包含扩展名)
console.log('文件名(无扩展名):', path.basename(filePath, '.js')); // 输出: node
3. 获取目录名
const path = require('path');
const filePath = '/usr/local/bin/node';
console.log('目录名:', path.dirname(filePath)); // 输出: /usr/local/bin
4. 获取扩展名
const path = require('path');
const filePath = 'document.pdf';
console.log('扩展名:', path.extname(filePath)); // 输出: .pdf
5. 解析路径
const path = require('path');
const filePath = '/usr/local/bin/node';
const parsedPath = path.parse(filePath);
console.log('解析结果:', parsedPath);
/* 输出:
{
root: '/',
dir: '/usr/local/bin',
base: 'node',
ext: '',
name: 'node'
}
*/
HTTP 服务器/客户端 (http/https)
模块概述
http 和 https 模块提供了创建 HTTP 和 HTTPS 服务器与客户端的功能。它们是 Node.js 构建 Web 应用的核心模块。
HTTP 服务器
创建简单的 HTTP 服务器
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`服务器运行在 http://${hostname}:${port}/`);
});
处理不同请求方法
const http = require('http');
const server = http.createServer((req, res) => {
res.setHeader('Content-Type', 'application/json');
if (req.method === 'GET') {
res.statusCode = 200;
res.end(JSON.stringify({ message: 'GET 请求成功' }));
} else if (req.method === 'POST') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
res.statusCode = 200;
res.end(JSON.stringify({ message: 'POST 请求成功', data: JSON.parse(body) }));
});
} else {
res.statusCode = 405;
res.end(JSON.stringify({ message: '不支持的请求方法' }));
}
});
server.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000/');
});
HTTP 客户端
发送 GET 请求
const http = require('http');
http.get('http://localhost:3000', (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log('响应数据:', JSON.parse(data));
});
}).on('error', (error) => {
console.error('请求失败:', error.message);
});
事件机制 (events)
模块概述
events 模块提供了事件驱动的编程模式。通过 EventEmitter 类,开发者可以创建、触发和监听自定义事件。
核心 API
创建和使用 EventEmitter
const EventEmitter = require('events');
// 创建自定义事件发射器
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// 监听事件
myEmitter.on('event', (arg1, arg2) => {
console.log('事件触发:', arg1, arg2);
});
// 触发事件
myEmitter.emit('event', '参数1', '参数2');
一次性事件监听
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
// 一次性事件监听
myEmitter.once('event', () => {
console.log('这个事件只会触发一次');
});
// 第一次触发
myEmitter.emit('event'); // 输出: 这个事件只会触发一次
// 第二次触发(无输出)
myEmitter.emit('event');
事件监听器数量
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
// 添加多个监听器
myEmitter.on('event', () => console.log('监听器1'));
myEmitter.on('event', () => console.log('监听器2'));
myEmitter.on('event', () => console.log('监听器3'));
// 获取监听器数量
console.log('监听器数量:', myEmitter.listenerCount('event')); // 输出: 3
// 获取所有监听器
console.log('所有监听器:', myEmitter.listeners('event'));
流操作 (stream)
模块概述
stream 模块提供了处理流式数据的抽象接口。Node.js 中有四种基本的流类型:Readable(可读流)、Writable(可写流)、Duplex(双向流)和 Transform(转换流)。
核心 API
可读流 (Readable Stream)
const fs = require('fs');
// 创建可读流
const readableStream = fs.createReadStream('large-file.txt', 'utf8');
// 监听数据事件
readableStream.on('data', (chunk) => {
console.log('读取到数据块:', chunk.length);
});
// 监听结束事件
readableStream.on('end', () => {
console.log('文件读取完毕');
});
// 监听错误事件
readableStream.on('error', (error) => {
console.error('读取错误:', error);
});
可写流 (Writable Stream)
const fs = require('fs');
// 创建可写流
const writableStream = fs.createWriteStream('output.txt');
// 写入数据
writableStream.write('Hello, ');
writableStream.write('Node.js!\n');
// 结束写入
writableStream.end('写入完成');
// 监听完成事件
writableStream.on('finish', () => {
console.log('写入操作完成');
});
管道流 (Pipeline)
const fs = require('fs');
const zlib = require('zlib');
// 使用管道流进行文件压缩
const readableStream = fs.createReadStream('large-file.txt');
const writableStream = fs.createWriteStream('large-file.txt.gz');
const gzip = zlib.createGzip();
// 将流连接起来
readableStream.pipe(gzip).pipe(writableStream);
console.log('文件压缩中...');
二进制数据 (buffer)
模块概述
buffer 模块提供了处理二进制数据的功能。Buffer 类是 Node.js 中用于存储原始二进制数据的全局对象。
核心 API
创建 Buffer
// 创建指定大小的 Buffer
const buffer1 = Buffer.alloc(10); // 创建大小为 10 的空 Buffer
// 从数组创建 Buffer
const buffer2 = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); // 从十六进制数组创建
// 从字符串创建 Buffer
const buffer3 = Buffer.from('Hello, Node.js', 'utf8'); // 从 UTF-8 字符串创建
console.log('Buffer1:', buffer1);
console.log('Buffer2:', buffer2.toString()); // 输出: buffer
console.log('Buffer3:', buffer3.toString()); // 输出: Hello, Node.js
Buffer 操作
const buffer1 = Buffer.from('Hello');
const buffer2 = Buffer.from(' World');
// 合并 Buffer
const buffer3 = Buffer.concat([buffer1, buffer2]);
console.log('合并结果:', buffer3.toString()); // 输出: Hello World
// 比较 Buffer
const result = Buffer.compare(buffer1, buffer2);
console.log('比较结果:', result); // 输出: -1 (buffer1 在字典序上小于 buffer2)
// 复制 Buffer
const buffer4 = Buffer.alloc(buffer1.length);
buffer1.copy(buffer4);
console.log('复制结果:', buffer4.toString()); // 输出: Hello
加密功能 (crypto)
模块概述
crypto 模块提供了加密功能,包括密码学哈希、HMAC、加密/解密、数字签名等。
核心 API
1. 生成哈希值
const crypto = require('crypto');
// 生成 SHA256 哈希值
const data = 'Hello, Node.js';
const hash = crypto.createHash('sha256');
// 更新哈希内容
hash.update(data);
// 获取哈希值(十六进制格式)
const hexHash = hash.digest('hex');
console.log('SHA256 哈希:', hexHash);
// 输出类似: 315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3
2. HMAC 签名
const crypto = require('crypto');
const secret = 'my-secret-key';
const data = 'Hello, Node.js';
// 创建 HMAC 对象
const hmac = crypto.createHmac('sha256', secret);
// 更新 HMAC 内容
hmac.update(data);
// 获取 HMAC 值
const hmacValue = hmac.digest('hex');
console.log('HMAC 签名:', hmacValue);
3. 对称加密 (AES)
const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32); // 256 位密钥
const iv = crypto.randomBytes(16); // 128 位初始化向量
const text = '这是要加密的文本';
// 加密
const cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
console.log('加密结果:', encrypted);
// 解密
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
console.log('解密结果:', decrypted);
工具函数 (util)
模块概述
util 模块提供了一系列实用工具函数,包括类型检查、对象继承、回调转换为 Promise 等。
核心 API
1. 回调转换为 Promise (promisify)
const util = require('util');
const fs = require('fs');
// 将回调函数转换为 Promise 形式
const readFilePromise = util.promisify(fs.readFile);
async function readFileExample() {
try {
const data = await readFilePromise('example.txt', 'utf8');
console.log('文件内容:', data);
} catch (error) {
console.error('读取失败:', error);
}
}
readFileExample();
2. 对象继承 (inherits)
const util = require('util');
const EventEmitter = require('events');
// 创建自定义类
function MyStream() {
EventEmitter.call(this);
}
// 继承 EventEmitter 类
util.inherits(MyStream, EventEmitter);
// 添加自定义方法
MyStream.prototype.write = function(data) {
this.emit('data', data);
};
const stream = new MyStream();
// 监听事件
stream.on('data', (data) => {
console.log('接收数据:', data);
});
// 触发事件
stream.write('Hello, Node.js');
3. 格式化字符串 (format)
const util = require('util');
// 格式化字符串
const formatted = util.format('Hello %s, you are %d years old', 'Alice', 30);
console.log(formatted); // 输出: Hello Alice, you are 30 years old
// 使用占位符
const info = util.format('Error: %O', { code: 404, message: 'Not Found' });
console.log(info); // 输出: Error: { code: 404, message: 'Not Found' }
子进程 (child_process)
模块概述
child_process 模块提供了创建和管理子进程的功能,可以用于执行外部命令或其他 Node.js 脚本。
核心 API
1. 执行外部命令 (exec)
const { exec } = require('child_process');
// 执行 ls 命令
exec('ls -la', (error, stdout, stderr) => {
if (error) {
console.error(`执行错误: ${error}`);
return;
}
console.log(`标准输出:\n${stdout}`);
if (stderr) {
console.error(`标准错误:\n${stderr}`);
}
});
2. 衍生子进程 (spawn)
const { spawn } = require('child_process');
// 衍生 ls 进程
const ls = spawn('ls', ['-la']);
// 监听标准输出
ls.stdout.on('data', (data) => {
console.log(`标准输出:\n${data}`);
});
// 监听标准错误
ls.stderr.on('data', (data) => {
console.error(`标准错误:\n${data}`);
});
// 监听进程退出
ls.on('close', (code) => {
console.log(`子进程退出码: ${code}`);
});
3. 执行 Node.js 脚本 (fork)
const { fork } = require('child_process');
// 衍生子进程执行脚本
const child = fork('child.js');
// 向子进程发送消息
child.send({ hello: 'world' });
// 接收子进程消息
child.on('message', (message) => {
console.log(`父进程接收到: ${message}`);
});
// 监听子进程退出
child.on('exit', (code) => {
console.log(`子进程退出码: ${code}`);
});
系统信息 (os)
模块概述
os 模块提供了与操作系统交互的功能,可以获取系统信息如 CPU、内存、网络接口等。
核心 API
const os = require('os');
// 获取操作系统信息
console.log('操作系统平台:', os.platform());
console.log('操作系统版本:', os.version());
console.log('操作系统类型:', os.type());
console.log('主机名:', os.hostname());
console.log('系统 uptime:', os.uptime());
// 获取 CPU 信息
console.log('CPU 架构:', os.arch());
console.log('CPU 信息:', os.cpus());
// 获取内存信息
console.log('总内存(字节):', os.totalmem());
console.log('可用内存(字节):', os.freemem());
// 获取网络接口
console.log('网络接口:', os.networkInterfaces());
// 获取用户信息
console.log('当前用户:', os.userInfo());
网络基础 (net)
模块概述
net 模块提供了创建 TCP 服务器和客户端的功能,是构建网络应用的基础。
核心 API
创建 TCP 服务器
const net = require('net');
const server = net.createServer((socket) => {
console.log('客户端已连接');
// 发送欢迎消息
socket.write('欢迎连接到 TCP 服务器!\n');
// 监听数据
socket.on('data', (data) => {
console.log(`接收到数据: ${data}`);
socket.write(`服务器回复: ${data}`);
});
// 监听连接关闭
socket.on('end', () => {
console.log('客户端已断开连接');
});
});
server.listen(3000, () => {
console.log('TCP 服务器运行在端口 3000');
});
创建 TCP 客户端
const net = require('net');
const client = new net.Socket();
client.connect(3000, '127.0.0.1', () => {
console.log('已连接到服务器');
client.write('Hello, Server!');
});
client.on('data', (data) => {
console.log(`服务器回复: ${data}`);
// 关闭连接
client.destroy();
});
client.on('close', () => {
console.log('连接已关闭');
});
URL 处理 (url)
模块概述
url 模块提供了 URL 解析和处理的功能。Node.js 18+ 推荐使用 WHATWG URL API。
核心 API
const { URL } = require('url');
// 创建 URL 对象
const myURL = new URL('https://user:pass@example.com:8080/path/to/resource?query=123#hash');
console.log('协议:', myURL.protocol); // 输出: https:
console.log('用户名:', myURL.username); // 输出: user
console.log('密码:', myURL.password); // 输出: pass
console.log('主机名:', myURL.hostname); // 输出: example.com
console.log('端口:', myURL.port); // 输出: 8080
console.log('路径:', myURL.pathname); // 输出: /path/to/resource
console.log('查询参数:', myURL.search); // 输出: ?query=123
console.log('哈希:', myURL.hash); // 输出: #hash
// 解析查询参数
console.log('查询参数对象:', myURL.searchParams);
console.log('query 参数值:', myURL.searchParams.get('query')); // 输出: 123
// 添加查询参数
myURL.searchParams.append('foo', 'bar');
console.log('更新后的 URL:', myURL.href);
查询字符串 (querystring)
模块概述
querystring 模块提供了处理 URL 查询字符串的功能。
核心 API
const querystring = require('querystring');
// 解析查询字符串
const query = 'name=John&age=30&city=New+York';
const parsedQuery = querystring.parse(query);
console.log('解析结果:', parsedQuery);
// 输出: { name: 'John', age: '30', city: 'New York' }
// 序列化对象为查询字符串
const obj = { name: 'John', age: 30, hobbies: ['reading', 'coding'] };
const stringified = querystring.stringify(obj);
console.log('序列化结果:', stringified);
// 输出: name=John&age=30&hobbies=reading&hobbies=coding
// 编码查询字符串
const encoded = querystring.escape('name=John Doe');
console.log('编码结果:', encoded); // 输出: name%3DJohn%20Doe
// 解码查询字符串
const decoded = querystring.unescape(encoded);
console.log('解码结果:', decoded); // 输出: name=John Doe
断言测试 (assert)
模块概述
assert 模块提供了断言测试的功能,用于验证代码的正确性。
核心 API
const assert = require('assert');
// 基本断言
assert.strictEqual(1 + 1, 2, '1 + 1 应该等于 2');
// 断言对象相等
const obj1 = { a: 1 };
const obj2 = { a: 1 };
assert.deepStrictEqual(obj1, obj2, '对象应该深度相等');
// 断言条件为真
assert.ok(true, '条件应该为真');
// 断言错误
assert.throws(() => {
throw new Error('预期的错误');
}, Error, '应该抛出 Error 类型的错误');
// 断言不抛出错误
assert.doesNotThrow(() => {
return 1 + 1;
}, '不应该抛出错误');
集群管理 (cluster)
模块概述
cluster 模块提供了创建集群的功能,可以充分利用多核 CPU 资源,提高应用性能。
核心 API
const cluster = require('cluster');
const os = require('os');
const http = require('http');
if (cluster.isMaster) {
console.log(`主进程 ${process.pid} 正在运行`);
// 根据 CPU 核心数创建工作进程
const numCPUs = os.cpus().length;
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
// 监听工作进程退出
cluster.on('exit', (worker, code, signal) => {
console.log(`工作进程 ${worker.process.pid} 已退出`);
// 重启退出的工作进程
cluster.fork();
});
} else {
// 工作进程创建 HTTP 服务器
http.createServer((req, res) => {
res.writeHead(200);
res.end(`响应来自工作进程 ${process.pid}`);
}).listen(8000);
console.log(`工作进程 ${process.pid} 已启动`);
}
虚拟机 (vm)
模块概述
vm 模块提供了在沙箱环境中执行 JavaScript 代码的功能。
核心 API
const vm = require('vm');
// 创建上下文对象
const context = { x: 10, y: 20 };
// 执行脚本
const script = new vm.Script('x + y');
const result = script.runInNewContext(context);
console.log('执行结果:', result); // 输出: 30
// 创建模块
const module = new vm.SourceTextModule(`
export const hello = 'Hello, Node.js';
export function add(a, b) {
return a + b;
}
`);
// 编译和评估模块
(async () => {
await module.link(() => {});
await module.evaluate();
// 获取导出
const { hello, add } = module.namespace;
console.log(hello); // 输出: Hello, Node.js
console.log(add(2, 3)); // 输出: 5
})();
模块系统 (module)
模块概述
module 模块提供了与模块系统交互的功能,允许开发者自定义模块加载行为。
核心 API
// module.exports 用于导出模块
module.exports = {
greet: function(name) {
return `Hello, ${name}!`;
},
add: function(a, b) {
return a + b;
}
};
// exports 是 module.exports 的引用
exports.greet = function(name) {
return `Hello, ${name}!`;
};
// 获取当前模块的目录名
console.log('模块目录:', __dirname);
// 获取当前模块的文件名
console.log('模块文件名:', __filename);
// 模块加载事件
module.on('load', (filename) => {
console.log(`模块 ${filename} 已加载`);
});
性能监控 (perf_hooks)
模块概述
perf_hooks 模块提供了性能监控的功能,可以用于测量代码执行时间和资源使用情况。
核心 API
const { performance, PerformanceObserver } = require('perf_hooks');
// 创建性能观察者
const obs = new PerformanceObserver((items) => {
console.log('性能测量结果:', items.getEntries()[0]);
performance.clearMarks();
});
obs.observe({ entryTypes: ['measure'] });
// 开始测量
performance.mark('A');
// 执行一些操作
for (let i = 0; i < 1000000; i++) {
// 耗时操作
}
// 结束测量
performance.mark('B');
performance.measure('A to B', 'A', 'B');
// 测量异步操作
async function measureAsync() {
performance.mark('async-start');
// 模拟异步操作
await new Promise(resolve => setTimeout(resolve, 1000));
performance.mark('async-end');
performance.measure('async-operation', 'async-start', 'async-end');
}
measureAsync();
UDP 数据报 (dgram)
模块概述
dgram 模块提供了 UDP 数据报套接字的功能,用于创建 UDP 服务器和客户端。
核心 API
创建 UDP 服务器
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('error', (err) => {
console.error(`服务器错误: ${err.stack}`);
server.close();
});
server.on('message', (msg, rinfo) => {
console.log(`服务器收到: ${msg} 来自 ${rinfo.address}:${rinfo.port}`);
// 回复客户端
server.send('已收到消息', rinfo.port, rinfo.address);
});
server.on('listening', () => {
const address = server.address();
console.log(`UDP 服务器正在监听 ${address.address}:${address.port}`);
});
server.bind(41234);
创建 UDP 客户端
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
const message = Buffer.from('Hello, UDP Server!');
client.send(message, 41234, 'localhost', (err) => {
if (err) {
console.error('发送失败:', err);
client.close();
}
console.log('消息已发送');
});
client.on('message', (msg, rinfo) => {
console.log(`客户端收到: ${msg} 来自 ${rinfo.address}:${rinfo.port}`);
client.close();
});
域名解析 (dns)
模块概述
dns 模块提供了域名解析的功能,可以将域名转换为 IP 地址,或将 IP 地址转换为域名。
核心 API
const dns = require('dns');
// 解析域名
(async () => {
try {
const addresses = await dns.promises.resolve4('www.example.com');
console.log('IPv4 地址:', addresses);
} catch (error) {
console.error('解析失败:', error);
}
});
// 反向解析 IP 地址
dns.promises.reverse('8.8.8.8')
.then((hostnames) => {
console.log('反向解析结果:', hostnames);
})
.catch((error) => {
console.error('反向解析失败:', error);
});
// 获取 MX 记录
dns.promises.resolveMx('example.com')
.then((records) => {
console.log('MX 记录:', records);
})
.catch((error) => {
console.error('获取 MX 记录失败:', error);
});
压缩解压 (zlib)
模块概述
zlib 模块提供了压缩和解压功能,支持多种压缩格式如 Gzip、Deflate 等。
核心 API
const zlib = require('zlib');
const fs = require('fs');
// 文件压缩
const gzip = zlib.createGzip();
const input = fs.createReadStream('large-file.txt');
const output = fs.createWriteStream('large-file.txt.gz');
input.pipe(gzip).pipe(output);
console.log('文件压缩中...');
// 文件解压
const gunzip = zlib.createGunzip();
const compressedInput = fs.createReadStream('large-file.txt.gz');
const decompressedOutput = fs.createWriteStream('decompressed.txt');
compressedInput.pipe(gunzip).pipe(decompressedOutput);
console.log('文件解压中...');
// 字符串压缩和解压
const text = '这是一段需要压缩的文本内容';
zlib.gzip(text, (err, compressed) => {
if (err) throw err;
console.log('压缩后:', compressed);
zlib.gunzip(compressed, (err, decompressed) => {
if (err) throw err;
console.log('解压后:', decompressed.toString());
});
});
逐行读取 (readline)
模块概述
readline 模块提供了逐行读取输入的功能,常用于命令行交互和处理文本文件。
核心 API
const readline = require('readline');
const fs = require('fs');
// 创建 readline 接口
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 命令行交互
rl.question('请输入您的姓名: ', (name) => {
console.log(`你好, ${name}!`);
rl.close();
});
// 逐行读取文件
const fileStream = fs.createReadStream('file.txt');
const fileRl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
let lineCount = 0;
fileRl.on('line', (line) => {
lineCount++;
console.log(`第 ${lineCount} 行: ${line}`);
});
fileRl.on('close', () => {
console.log(`文件共有 ${lineCount} 行`);
});
其他实用模块
REPL 环境 (repl)
const repl = require('repl');
// 创建 REPL 实例
const replServer = repl.start({
prompt: '> ',
eval: (cmd, context, filename, callback) => {
// 自定义求值逻辑
callback(null, eval(cmd));
}
});
// 添加自定义命令
replServer.defineCommand('hello', {
help: '显示欢迎消息',
action(name) {
this.clearBufferedCommand();
console.log(`Hello, ${name || 'world'}!`);
this.displayPrompt();
}
});
终端控制 (tty)
const tty = require('tty');
const process = require('process');
// 检查是否在终端环境
console.log('标准输入是终端:', tty.isatty(process.stdin.fd));
console.log('标准输出是终端:', tty.isatty(process.stdout.fd));
// 获取终端大小
const size = process.stdout.getWindowSize();
console.log('终端大小:', size);
V8 引擎接口 (v8)
const v8 = require('v8');
// 获取堆统计信息
console.log('堆统计信息:', v8.getHeapStatistics());
// 获取堆空间统计信息
console.log('堆空间统计信息:', v8.getHeapSpaceStatistics());
// 序列化对象
const obj = { x: 1, y: 2 };
const serialized = v8.serialize(obj);
console.log('序列化结果:', serialized);
// 反序列化对象
const deserialized = v8.deserialize(serialized);
console.log('反序列化结果:', deserialized);