| 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); |
|
|
| |
| |
| |
| |
| 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 { |
| |
| this.demoPath(); |
|
|
| |
| this.demoOs(); |
|
|
| |
| this.demoEvents(); |
|
|
| |
| 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 模块]'); |
| |
| |
| 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); |
|
|
| |
| const stats = fs.statSync(this.demoFile); |
| console.log(`文件大小: ${stats.size} bytes`); |
| console.log(`创建时间: ${stats.birthtime}`); |
|
|
| |
| console.log(`使用 Stream Pipeline 复制文件到: ${this.copyFile}`); |
| |
| await pipelineAsync( |
| fs.createReadStream(this.demoFile), |
| fs.createWriteStream(this.copyFile) |
| ); |
| |
| console.log('文件复制完成 (Stream pipeline)'); |
|
|
| |
| const copiedContent = fs.readFileSync(this.copyFile, 'utf8'); |
| console.log('读取复制文件内容前 50 字符:', copiedContent.substring(0, 50).replace(/\n/g, '\\n') + '...'); |
| } |
| } |
|
|
| module.exports = CoreApiDemo; |
|
|