红宝书第四十六讲:Node.js基础与API设计解析
资料取自《JavaScript高级程序设计(第5版)》。
查看总目录:红宝书学习大纲
一、Node.js基础概念
1. 流(Streams)的核心地位 12
Node.js的文件读写和网络通信依赖流机制,参考浏览器的Streams API1原理:
流类型 | Node.js对应示例 | 功能类比浏览器API |
---|---|---|
可读流 (Readable) | fs.createReadStream('file.txt') |
fetch() 响应体作为可读流1 |
可写流 (Writable) | fs.createWriteStream('output.txt') |
WritableStream 写入数据1 |
转换流 (Transform) | zlib.createGzip() (压缩数据) |
浏览器压缩流1 |
示例:文件复制(流式处理)
const fs = require('fs');
// 创建可读流(类比浏览器中的ReadableStream[^2])
const readStream = fs.createReadStream('source.txt');
// 创建可写流
const writeStream = fs.createWriteStream('copy.txt');
// 管道传输(数据像水流一样流动)
readStream.pipe(writeStream);
// 监听完成事件
writeStream.on('finish', () => console.log('文件复制完成'));
二、Node.js API设计原则
1. 异步非阻塞设计(事件驱动) 2
借鉴浏览器的事件监听机制(如addEventListener
3),Node.js的EventEmitter
类允许对象发布事件:
const EventEmitter = require('events');
// 自定义API类继承事件发射器
class MyAPI extends EventEmitter {
fetchData() {
setTimeout(() => {
this.emit('data', { result: '数据加载完成' }); // 触发事件
}, 1000);
}
}
const api = new MyAPI();
api.on('data', (data) => console.log(data)); // 订阅事件
api.fetchData();
2. 模块化设计 2
Node.js使用require
加载模块,类似浏览器的模块加载器(资料5列举的模块加载器如SystemJS
):
// 引入内置fs模块(无需安装)
const fs = require('fs');
// 自定义模块(保存为math.js)
exports.add = (a, b) => a + b;
// 使用模块
const math = require('./math.js');
console.log(math.add(2, 3)); // 输出5
三、RESTful API设计示例
1. 使用http
模块创建基本服务器 [结合资料3的异步特性]
假设处理用户数据请求(虽然没有显式提到Express,但可用原生模块示范):
const http = require('http');
// 创建服务器(类似浏览器的Web API请求处理[^5])
const server = http.createServer((req, res) => {
if (req.url === '/api/users' && req.method === 'GET') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify([{ id: 1, name: 'Alice' }])); // 返回JSON数据
} else {
res.statusCode = 404;
res.end('API路径不存在');
}
});
server.listen(3000, () => {
console.log('服务器运行在http://localhost:3000');
});
路由拆分策略流程图
目录:总目录
上篇文章:红宝书第四十五讲:状态管理核心工具详解:RxJS & Redux & MobX的奇妙世界
下篇文章:红宝书第四十七讲:Node.js服务器框架解析:Express vs Koa 完全指南
脚注
《JavaScript高级程序设计(第5版)》描述了流的分类和工作原理,类比Node.js的流操作 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
《JavaScript高级程序设计(第5版)》提及文件操作API,与Node.js的
fs
模块功能相关 ↩︎ ↩︎ ↩︎《JavaScript高级程序设计(第5版)》中的DOM事件模型启发了Node.js事件驱动的API设计 ↩︎