File size: 3,444 Bytes
cee4ba4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | const fs = require('fs');
const path = require('path');
const os = require('os');
const EventEmitter = require('events');
const { pipeline } = require('stream');
const { promisify } = require('util');
const pipelineAsync = promisify(pipeline);
/**
* Node.js 核心 API 演示模块
* 展示: fs, path, stream, os, events, util
*/
class CoreApiDemo extends EventEmitter {
constructor(dataDir) {
super();
this.dataDir = dataDir;
this.demoFile = path.join(dataDir, 'core_demo.txt');
this.copyFile = path.join(dataDir, 'core_demo_copy.txt');
}
async run() {
console.log('--- 开始 Node.js 核心 API 演示 ---');
try {
// 1. Path 模块演示
this.demoPath();
// 2. OS 模块演示
this.demoOs();
// 3. Events 模块演示
this.demoEvents();
// 4. FS & Stream 模块演示
await this.demoFsAndStream();
} catch (err) {
console.error('核心 API 演示出错:', err);
}
console.log('--- 核心 API 演示结束 ---');
}
demoPath() {
console.log('\n[Path 模块]');
console.log(`__dirname: ${__dirname}`);
console.log(`文件名 (basename): ${path.basename(this.demoFile)}`);
console.log(`扩展名 (extname): ${path.extname(this.demoFile)}`);
console.log(`解析路径 (parse):`, path.parse(this.demoFile));
}
demoOs() {
console.log('\n[OS 模块]');
console.log(`平台: ${os.platform()} (${os.arch()})`);
console.log(`主机名: ${os.hostname()}`);
console.log(`总内存: ${(os.totalmem() / 1024 / 1024 / 1024).toFixed(2)} GB`);
console.log(`空闲内存: ${(os.freemem() / 1024 / 1024 / 1024).toFixed(2)} GB`);
console.log(`CPU核数: ${os.cpus().length}`);
}
demoEvents() {
console.log('\n[Events 模块]');
console.log('注册自定义事件 "hello"...');
// 监听一次性事件
this.once('hello', (data) => {
console.log(`触发了 "hello" 事件,数据: ${JSON.stringify(data)}`);
});
// 触发事件
this.emit('hello', { msg: 'Node.js is cool!', timestamp: Date.now() });
}
async demoFsAndStream() {
console.log('\n[FS & Stream 模块]');
// FS: 写入文件
const content = 'Hello Node.js Core APIs!\nThis is a test file for streams.\n' + new Date().toISOString();
console.log(`写入文件: ${this.demoFile}`);
fs.writeFileSync(this.demoFile, content);
// FS: 获取文件状态
const stats = fs.statSync(this.demoFile);
console.log(`文件大小: ${stats.size} bytes`);
console.log(`创建时间: ${stats.birthtime}`);
// Stream: 流式复制文件
console.log(`使用 Stream Pipeline 复制文件到: ${this.copyFile}`);
await pipelineAsync(
fs.createReadStream(this.demoFile),
fs.createWriteStream(this.copyFile)
);
console.log('文件复制完成 (Stream pipeline)');
// FS: 读取复制后的文件验证
const copiedContent = fs.readFileSync(this.copyFile, 'utf8');
console.log('读取复制文件内容前 50 字符:', copiedContent.substring(0, 50).replace(/\n/g, '\\n') + '...');
}
}
module.exports = CoreApiDemo;
|