Skip to content

Express 课程计划

课程概述

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

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

学习目标

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

课程内容

  1. 课程介绍

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

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

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

实践操作

bash
# 安装依赖
npm install

# 运行测试
npm test

预期输出

✅ 所有应用测试通过
✅ 所有路由器测试通过
✅ 所有请求对象测试通过
✅ 所有响应对象测试通过

第 2 课:路由层实现(10 分钟)

学习目标

  • 理解路由层的概念
  • 掌握路径匹配和参数提取
  • 学习正则表达式在路由中的应用

课程内容

  1. 路由层概念

    • 什么是路由层
    • 路由层的作用
    • 路由层的组成
  2. 路径匹配

    • 静态路径匹配
    • 动态参数匹配
    • 正则表达式匹配
  3. 参数提取

    • 路径参数
    • 查询参数
    • 参数验证
  4. 代码实现

    • 查看 src/layer.js
    • 理解路径匹配逻辑
    • 运行相关测试

实践操作

javascript
const { Layer } = require('./src/layer');

// 创建路由层
const layer = new Layer('/users/:id', (req, res) => {
  console.log('User ID:', req.params.id);
});

// 匹配路径
const matched = layer.match('/users/123');
console.log('Matched:', matched);
console.log('Params:', layer.params);

测试验证

bash
node test/router.test.js

预期输出

✅ 所有路由器测试通过

第 3 课:路由器实现(10 分钟)

学习目标

  • 理解路由器的工作原理
  • 掌握路由注册和匹配
  • 学习中间件执行机制

课程内容

  1. 路由器概念

    • 什么是路由器
    • 路由器的作用
    • 路由器的组成
  2. 路由注册

    • HTTP 方法路由
    • 中间件路由
    • 路由分组
  3. 路由匹配

    • 路径匹配
    • 方法匹配
    • 参数提取
  4. 代码实现

    • 查看 src/router.js
    • 理解路由处理逻辑
    • 运行相关测试

实践操作

javascript
const { Router } = require('./src/router');

// 创建路由器
const router = new Router();

// 注册路由
router.get('/', (req, res) => {
  res.send('Home');
});

router.get('/users/:id', (req, res) => {
  res.json({ id: req.params.id });
});

router.post('/users', (req, res) => {
  res.send('User created');
});

// 处理请求
const req = {
  method: 'GET',
  url: '/users/123'
};

router.handle(req, {}, () => {
  console.log('Route not found');
});

测试验证

bash
node test/router.test.js

预期输出

✅ 所有路由器测试通过

第 4 课:请求对象实现(10 分钟)

学习目标

  • 理解请求对象的扩展
  • 掌握查询字符串解析
  • 学习请求头处理

课程内容

  1. 请求对象概念

    • 什么是请求对象
    • 请求对象的扩展
    • 请求对象的属性
  2. 查询字符串解析

    • 查询字符串格式
    • 解析算法
    • 参数编码和解码
  3. 请求头处理

    • 获取请求头
    • 请求头大小写
    • 内容类型检测
  4. 代码实现

    • 查看 src/request.js
    • 理解请求处理逻辑
    • 运行相关测试

实践操作

javascript
const { Request } = require('./src/request');

const req = {
  url: '/users?id=123&name=John',
  method: 'GET',
  headers: {
    'content-type': 'application/json',
    'user-agent': 'Mozilla/5.0'
  }
};

const request = new Request(req);

console.log('Query:', request.query);
console.log('Content-Type:', request.get('content-type'));
console.log('User-Agent:', request.get('user-agent'));
console.log('Is JSON:', request.is('json'));

测试验证

bash
node test/request.test.js

预期输出

✅ 所有请求对象测试通过

第 5 课:响应对象实现(10 分钟)

学习目标

  • 理解响应对象的扩展
  • 掌握响应发送方法
  • 学习状态码和响应头设置

课程内容

  1. 响应对象概念

    • 什么是响应对象
    • 响应对象的扩展
    • 响应对象的方法
  2. 响应发送

    • send() 方法
    • json() 方法
    • sendStatus() 方法
  3. 响应配置

    • 状态码设置
    • 响应头设置
    • Cookie 设置
  4. 代码实现

    • 查看 src/response.js
    • 理解响应处理逻辑
    • 运行相关测试

实践操作

javascript
const { Response } = require('./src/response');

const res = {
  writeHead: (code, headers) => {
    console.log('Status:', code);
    console.log('Headers:', headers);
  },
  end: (body) => {
    console.log('Body:', body);
  }
};

const response = new Response(res);

// 发送 JSON
response.json({ message: 'Hello' });

// 发送字符串
response.send('Hello World');

// 发送状态码
response.sendStatus(404);

// 设置 Cookie
response.cookie('session', 'abc123', {
  httpOnly: true,
  secure: true
});

测试验证

bash
node test/response.test.js

预期输出

✅ 所有响应对象测试通过

第 6 课:应用实现(10 分钟)

学习目标

  • 理解应用类的结构
  • 掌握中间件注册机制
  • 学习请求处理流程

课程内容

  1. 应用类概念

    • 什么是应用类
    • 应用类的职责
    • 应用类的组成
  2. 中间件注册

    • 应用级中间件
    • 路由级中间件
    • 错误处理中间件
  3. 请求处理

    • 请求接收
    • 中间件执行
    • 路由匹配
    • 响应发送
  4. 代码实现

    • 查看 src/application.js
    • 理解应用处理逻辑
    • 运行相关测试

实践操作

javascript
const { Application } = require('./src/application');

const app = new Application();

// 设置配置
app.set('port', 3000);
app.set('env', 'development');

// 使用中间件
app.use((req, res, next) => {
  console.log('Request:', req.method, req.url);
  next();
});

// 定义路由
app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.get('/users/:id', (req, res) => {
  res.json({ id: req.params.id });
});

app.post('/users', (req, res) => {
  res.send('User created');
});

// 启动服务器
app.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

测试验证

bash
node test/application.test.js

预期输出

✅ 所有应用测试通过

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

学习目标

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

课程内容

  1. 应用架构

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

    • 日志中间件
    • 错误处理中间件
    • 认证中间件
  3. 实践操作

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

实践操作

javascript
const express = require('./src/express');

const app = express();

// 日志中间件
app.use((req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next();
});

// 静态文件中间件
app.use('/static', (req, res, next) => {
  // 实现静态文件服务
  next();
});

// 路由
app.get('/', (req, res) => {
  res.send(`
    <h1>Welcome to Express</h1>
    <p>A minimal web framework</p>
  `);
});

app.get('/api/users', (req, res) => {
  res.json([
    { id: 1, name: 'John' },
    { id: 2, name: 'Jane' }
  ]);
});

app.get('/api/users/:id', (req, res) => {
  res.json({ id: req.params.id, name: 'John' });
});

app.post('/api/users', (req, res) => {
  res.status(201).json({ message: 'User created' });
});

// 404 处理
app.use((req, res) => {
  res.status(404).send('Not Found');
});

// 错误处理
app.use((err, req, res, next) => {
  console.error('Error:', err);
  res.status(500).send('Internal Server Error');
});

// 启动服务器
app.listen(3000);

预期输出

访问 http://localhost:3000 查看 Welcome 页面 访问 http://localhost:3000/api/users 查看 JSON 响应

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

学习目标

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

课程内容

  1. 课程回顾

    • 路由层
    • 路由器
    • 请求对象
    • 响应对象
    • 应用类
  2. 核心概念总结

    • 中间件模式
    • 路由系统
    • 请求/响应扩展
    • 错误处理
  3. 扩展方向

    • 添加更多 HTTP 方法
    • 实现模板引擎
    • 添加静态文件服务
    • 实现 Session 支持
    • 添加 WebSocket 支持

实践操作

bash
# 运行所有测试
npm test

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

预期输出

✅ 所有应用测试通过
✅ 所有路由器测试通过
✅ 所有请求对象测试通过
✅ 所有响应对象测试通过

学习成果

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

  1. ✅ 理解 Express 的核心架构
  2. ✅ 掌握路由系统的实现
  3. ✅ 实现中间件机制
  4. ✅ 扩展请求和响应对象
  5. ✅ 构建完整的 Web 框架
  6. ✅ 创建 RESTful API
  7. ✅ 实现错误处理

参考资源

下一步

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

  • Express 中间件开发
  • Express 模板引擎集成
  • Express 认证和授权
  • Express 数据库集成
  • Express WebSocket 实现
  • Express 性能优化

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


架构师AI杜公众号二维码

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