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;