markdown,nodejs前世今生以及内置模块相关知识点
一.markdown文件笔记的编写
二.node前世今生
以下是关于 Node.js 内置模块 的核心知识点总结,涵盖常用模块的功能、用法及典型场景:
一、核心内置模块概览
Node.js 提供了丰富的内置模块,无需额外安装即可直接使用。以下是最常用的模块分类及功能:
模块名称 | 功能描述 |
---|---|
fs | 文件系统操作(读写文件、目录操作等) |
path | 处理文件路径(解析、拼接、规范化路径等) |
http / https | 构建 HTTP/HTTPS 服务器或客户端 |
url | 解析和格式化 URL |
querystring | 处理 URL 查询字符串(序列化/反序列化) |
events | 事件驱动模型(自定义事件Emitter) |
stream | 流操作(处理大文件、网络数据等流式数据) |
buffer | 处理二进制数据(Buffer 类) |
os | 操作系统相关信息(内存、CPU、平台等) |
process | 进程相关信息(环境变量、退出码、信号处理等) |
child_process | 创建子进程(执行命令行程序、多进程通信等) |
util | 工具函数(格式化字符串、类型检查、回调转 Promise 等) |
timers | 定时器(setTimeout 、setInterval 等) |
crypto | 加密解密(哈希、加密算法、签名等) |
二、重点内置模块详解
1. fs
模块(文件系统)
功能:实现同步/异步文件操作,支持流式读写。
核心方法:
- 同步操作(阻塞主线程,谨慎使用):
fs.readFileSync(path, options)
:同步读取文件。fs.writeFileSync(path, data, options)
:同步写入文件。
- 异步操作(推荐,基于回调或 Promise):
fs.readFile(path, options, callback)
:异步读取文件。fs.writeFile(path, data, options, callback)
:异步写入文件。
- 流式操作(处理大文件):
const fs = require('fs'); const readStream = fs.createReadStream('input.txt'); const writeStream = fs.createWriteStream('output.txt'); readStream.pipe(writeStream); // 管道流,高效传输数据
- 目录操作:
fs.mkdir(path, options, callback)
:创建目录。fs.readdir(path, options, callback)
:读取目录内容。
注意:options
常用参数:encoding
(编码,如 'utf8'
)、flag
(文件操作标志,如 'a'
表示追加)。
2. http
模块(HTTP 服务器)
功能:构建 HTTP 服务器,处理请求/响应。
基本用法:
const http = require('http');const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Hello, Node.js!\n');
});server.listen(3000, 'localhost', () => {console.log('Server running at http://localhost:3000/');
});
核心概念:
Request
对象:包含请求方法、URL、头部、数据等。Response
对象:用于设置响应状态码、头部、返回数据。- 路由处理:通过
req.url
和req.method
判断请求路径和方法。
3. path
模块(路径处理)
功能:处理不同操作系统的文件路径(避免 \
和 /
差异)。
常用方法:
path.join(...paths)
:拼接路径(自动处理分隔符)。path.join('/user', 'docs', 'file.txt'); // 结果:'/user/docs/file.txt'(Windows 下为 '\user\docs\file.txt')
path.resolve(...paths)
:将相对路径转为绝对路径。path.resolve('./src', 'index.js'); // 结果:当前工作目录 + '/src/index.js'
path.parse(path)
:解析路径为对象(包含根、目录、文件名等)。path.extname(path)
:获取文件扩展名(如.txt
)。
4. events
模块(事件驱动)
功能:实现自定义事件发射器(Emitter),解耦代码逻辑。
用法示例:
const EventEmitter = require('events').EventEmitter;
const emitter = new EventEmitter();// 监听事件
emitter.on('message', (data) => {console.log('Received message:', data);
});// 触发事件
emitter.emit('message', 'Hello from emitter!');
核心方法:
on(eventName, listener)
:绑定事件监听器。emit(eventName, ...args)
:触发事件并传递参数。once(eventName, listener)
:绑定只触发一次的监听器。
5. stream
模块(流操作)
功能:处理流式数据(如文件读写、网络传输),避免内存占用过高。
流的类型:
- 可读流(Readable):如文件读取流。
- 可写流(Writable):如文件写入流。
- 双工流(Duplex):同时支持读写(如网络套接字)。
- 转换流(Transform):处理数据并转换(如压缩/解压缩)。
管道示例(文件复制):
const fs = require('fs');
const readStream = fs.createReadStream('input.txt');
const writeStream = fs.createWriteStream('output.txt');
readStream.pipe(writeStream); // 自动处理数据流动
6. util
模块(工具函数)
功能:提供实用工具函数,简化开发。
常用方法:
util.format(format, ...args)
:格式化字符串(类似printf
)。util.format('Hello, %s! You have %d messages.', 'Alice', 5); // "Hello, Alice! You have 5 messages."
util.promisify(fn)
:将回调函数转为 Promise。const fs = require('fs'); const util = require('util'); const readFile = util.promisify(fs.readFile); // 将 fs.readFile 转为 Promise 形式 readFile('data.json', 'utf8').then(data => JSON.parse(data));
7. process
对象(当前进程)
功能:访问当前 Node.js 进程的信息和控制其行为。
常用属性/方法:
process.argv
:命令行参数数组(argv[0]
是 Node 路径,argv[1]
是脚本路径)。process.env
:环境变量对象(如process.env.NODE_ENV
)。process.exit(code)
:退出进程(code
为退出码,0 表示成功)。process.on('exit', callback)
:监听进程退出事件。
三、进阶模块与场景
1. child_process
模块(子进程)
功能:创建子进程,执行外部程序或 Node 脚本。
方法示例:
child_process.exec(command, callback)
:执行 shell 命令(如ls -l
)。const { exec } = require('child_process'); exec('ls -l', (err, stdout, stderr) => {if (err) throw err;console.log('stdout:', stdout); });
child_process.fork(modulePath)
:创建 Node 子进程(支持 IPC 通信)。
2. crypto
模块(加密解密)
功能:实现加密算法(如 MD5、SHA-1、AES 等)。
哈希示例:
const crypto = require('crypto');
const hash = crypto.createHash('sha256');
hash.update('Hello, Node.js!');
console.log(hash.digest('hex')); // 输出 SHA-256 哈希值
对称加密示例(AES):
const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = crypto.scryptSync('secret-key', 'salt', 32); // 生成密钥
const iv = crypto.randomBytes(16); // 初始化向量// 加密
const cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update('敏感数据', 'utf8', 'hex');
encrypted += cipher.final('hex');// 解密
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
3. buffer
模块(二进制数据)
功能:处理二进制数据(如图片、音频、网络协议数据)。
创建 Buffer:
const buffer = Buffer.from('Hello, Buffer!', 'utf8'); // 从字符串创建
const buffer2 = Buffer.alloc(10); // 分配指定大小的 Buffer(初始化为 0)
转换为字符串:
buffer.toString('utf8'); // "Hello, Buffer!"
四、最佳实践与注意事项
- 异步优先:
避免使用同步方法(如fs.readFileSync
),除非必要,以免阻塞事件循环。 - 流的使用场景:
处理大文件或高吞吐量数据时,优先使用流(stream
)而非一次性读取内存。 - 路径兼容性:
始终使用path
模块处理路径,确保跨平台兼容性。 - 事件驱动设计:
通过events
模块解耦组件,避免过度耦合。 - 安全加密:
使用crypto
模块时,优先选择高强度算法(如 SHA-256、AES-256),避免弱加密。
五、模块引入方式
Node.js 使用 CommonJS 规范 引入模块:
const moduleName = require('module-name'); // 引入内置模块
const myModule = require('./my-module'); // 引入自定义模块
通过掌握这些内置模块,你可以高效实现文件操作、网络服务、数据处理等核心功能,构建高性能的 Node.js 应用。
下周计划
将小组布置的考核任务完成
生活感悟
知识点未掌握好好学习