Skip to content

Node.js 课程计划

课程概述

本课程分为 8 节课,每节课 20-40 分钟,总时长约 45-60 分钟。通过理论讲解和实践操作,深入理解 Node.js 的核心功能。

第 1 课:课程介绍与环境准备(5 分钟)

学习目标

  • 了解课程内容和目标
  • 搭建开发环境
  • 项目初始化
  • 运行第一个测试

课程内容

  1. 课程介绍

    • Node.js 的核心概念
    • 本课程的学习目标
    • 课程结构安排
  2. 环境准备

    • 安装 Node.js
    • 克隆项目代码
    • 安装依赖:npm install
  3. 运行测试

    • 执行测试命令:npm test
    • 查看测试结果
    • 理解测试框架

实践操作

bash
# 安装依赖
npm install

# 运行测试
npm test

预期输出

✅ 所有事件发射器测试通过
✅ 所有事件循环测试通过
✅ 所有模块系统测试通过
✅ 所有流处理测试通过
✅ 所有 HTTP 服务器测试通过

第 2 课:事件发射器实现(10 分钟)

学习目标

  • 理解事件驱动编程模型
  • 掌握 EventEmitter 的实现原理
  • 学习事件监听和触发机制

课程内容

  1. 事件驱动编程

    • 什么是事件驱动
    • 事件循环的概念
    • 异步编程模型
  2. EventEmitter 实现

    • on() 方法:监听事件
    • emit() 方法:触发事件
    • off() 方法:移除监听器
    • once() 方法:一次性监听
  3. 代码实现

    • 查看 src/events.js
    • 理解核心实现
    • 运行相关测试

实践操作

javascript
const { EventEmitter } = require('./src/events');

const emitter = new EventEmitter();

// 监听事件
emitter.on('data', (data) => {
  console.log('Received:', data);
});

// 触发事件
emitter.emit('data', { message: 'Hello' });

测试验证

bash
node test/events.test.js

预期输出

✅ 所有事件发射器测试通过

第 3 课:事件循环实现(10 分钟)

学习目标

  • 理解事件循环的工作原理
  • 掌握定时器和异步回调的实现
  • 学习 nextTick 和 setImmediate 的区别

课程内容

  1. 事件循环原理

    • 事件循环的阶段
    • 宏任务和微任务
    • 执行顺序
  2. 定时器实现

    • setTimeout:延迟执行
    • setImmediate:立即执行
    • process.nextTick:下一个 tick 执行
  3. 代码实现

    • 查看 src/event-loop.js
    • 理解事件循环逻辑
    • 运行相关测试

实践操作

javascript
const { eventLoop } = require('./src/event-loop');

// 使用 setTimeout
setTimeout(() => {
  console.log('Timer fired');
}, 1000);

// 使用 setImmediate
setImmediate(() => {
  console.log('Immediate fired');
});

// 使用 nextTick
process.nextTick(() => {
  console.log('NextTick fired');
});

测试验证

bash
node test/event-loop.test.js

预期输出

✅ 所有事件循环测试通过

第 4 课:模块系统实现(10 分钟)

学习目标

  • 理解 CommonJS 模块系统
  • 掌握模块加载和缓存机制
  • 学习模块解析算法

课程内容

  1. 模块系统概述

    • CommonJS 规范
    • 模块加载流程
    • 模块缓存机制
  2. 模块解析

    • 相对路径解析
    • 绝对路径解析
    • node_modules 查找
  3. 代码实现

    • 查看 src/module.js
    • 理解模块加载逻辑
    • 运行相关测试

实践操作

javascript
// 创建模块文件
// my-module.js
module.exports.value = 42;

// 使用模块
const myModule = require('./my-module');
console.log(myModule.value);

测试验证

bash
node test/module.test.js

预期输出

✅ 所有模块系统测试通过

第 5 课:流处理实现(10 分钟)

学习目标

  • 理解流的概念和优势
  • 掌握可读流和可写流的实现
  • 学习流管道和转换流

课程内容

  1. 流的概念

    • 什么是流
    • 流的优势
    • 流的类型
  2. 流实现

    • Readable:可读流
    • Writable:可写流
    • Duplex:双向流
    • Transform:转换流
  3. 代码实现

    • 查看 src/stream.js
    • 理解流处理逻辑
    • 运行相关测试

实践操作

javascript
const { Readable, Writable } = require('./src/stream');

// 创建可读流
const readable = new Readable();
readable.push('data1');
readable.push('data2');
readable.push(null);

// 创建可写流
const writable = new Writable();
writable._write = (chunk, encoding, callback) => {
  console.log('Received:', chunk);
  callback();
};

// 使用管道
readable.pipe(writable);

测试验证

bash
node test/stream.test.js

预期输出

✅ 所有流处理测试通过

第 6 课:HTTP 服务器实现(10 分钟)

学习目标

  • 理解 HTTP 协议基础
  • 掌握 HTTP 服务器的实现
  • 学习请求和响应的处理

课程内容

  1. HTTP 协议

    • HTTP 请求格式
    • HTTP 响应格式
    • 状态码和响应头
  2. HTTP 服务器

    • 创建服务器
    • 处理请求
    • 发送响应
  3. 代码实现

    • 查看 src/http.js
    • 理解 HTTP 处理逻辑
    • 运行相关测试

实践操作

javascript
const { createServer } = require('./src/http');

const server = createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World!');
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

测试验证

bash
node test/http.test.js

预期输出

✅ 所有 HTTP 服务器测试通过

第 7 课:完整应用构建(10 分钟)

学习目标

  • 将所有组件整合
  • 构建完整的 Web 应用
  • 实现路由和中间件

课程内容

  1. 应用架构

    • 整合所有组件
    • 设计应用结构
    • 实现路由系统
  2. 中间件

    • 中间件概念
    • 中间件链
    • 错误处理
  3. 实践操作

    • 构建示例应用
    • 测试应用功能
    • 性能优化

实践操作

javascript
const { createServer } = require('./src/http');

const app = createServer((req, res) => {
  if (req.url === '/') {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<h1>Hello World!</h1>');
  } else if (req.url === '/api') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ message: 'Hello API' }));
  } else {
    res.writeHead(404);
    res.end('Not Found');
  }
});

app.listen(3000);

预期输出

访问 http://localhost:3000 查看 Hello World 访问 http://localhost:3000/api 查看 JSON 响应

第 8 课:总结与扩展(10 分钟)

学习目标

  • 回顾课程内容
  • 总结核心概念
  • 探索扩展方向

课程内容

  1. 课程回顾

    • 事件发射器
    • 事件循环
    • 模块系统
    • 流处理
    • HTTP 服务器
  2. 核心概念总结

    • 单线程模型
    • 异步 I/O
    • 事件驱动
    • 非阻塞操作
  3. 扩展方向

    • 添加更多 HTTP 功能
    • 实现 WebSocket 支持
    • 添加数据库集成
    • 性能优化技巧

实践操作

bash
# 运行所有测试
npm test

# 构建自己的应用
# 思考如何扩展功能

预期输出

✅ 所有事件发射器测试通过
✅ 所有事件循环测试通过
✅ 所有模块系统测试通过
✅ 所有流处理测试通过
✅ 所有 HTTP 服务器测试通过

学习成果

完成本课程后,你将能够:

  1. ✅ 理解 Node.js 的核心架构
  2. ✅ 掌握事件循环的工作原理
  3. ✅ 实现事件发射器
  4. ✅ 构建模块系统
  5. ✅ 实现流处理
  6. ✅ 创建 HTTP 服务器
  7. ✅ 构建完整的 Web 应用

参考资源

下一步

完成本课程后,你可以继续学习:

  • Express 框架
  • Koa 框架
  • NestJS 框架
  • 数据库集成
  • WebSocket 实现
  • 微服务架构

所有教学材料已保存。准备录制。


架构师AI杜公众号二维码

扫描二维码关注"架构师AI杜"公众号,获取更多技术内容和最新动态