nodejs-performance-project / src /coreApiDemo.js
3v324v23's picture
feat: Add Core API demonstration module
cee4ba4
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;