Appearance
Express 课程计划
课程概述
本课程分为 8 节课,每节课 20-40 分钟,总时长约 45-60 分钟。通过理论讲解和实践操作,深入理解 Express 的核心功能。
第 1 课:课程介绍与环境准备(5 分钟)
学习目标
- 了解课程内容和目标
- 搭建开发环境
- 项目初始化
- 运行第一个测试
课程内容
课程介绍
- Express 的核心概念
- 本课程的学习目标
- 课程结构安排
环境准备
- 安装 Node.js
- 克隆项目代码
- 安装依赖:
npm install
运行测试
- 执行测试命令:
npm test - 查看测试结果
- 理解测试框架
- 执行测试命令:
实践操作
bash
# 安装依赖
npm install
# 运行测试
npm test预期输出
✅ 所有应用测试通过
✅ 所有路由器测试通过
✅ 所有请求对象测试通过
✅ 所有响应对象测试通过第 2 课:路由层实现(10 分钟)
学习目标
- 理解路由层的概念
- 掌握路径匹配和参数提取
- 学习正则表达式在路由中的应用
课程内容
路由层概念
- 什么是路由层
- 路由层的作用
- 路由层的组成
路径匹配
- 静态路径匹配
- 动态参数匹配
- 正则表达式匹配
参数提取
- 路径参数
- 查询参数
- 参数验证
代码实现
- 查看
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 分钟)
学习目标
- 理解路由器的工作原理
- 掌握路由注册和匹配
- 学习中间件执行机制
课程内容
路由器概念
- 什么是路由器
- 路由器的作用
- 路由器的组成
路由注册
- HTTP 方法路由
- 中间件路由
- 路由分组
路由匹配
- 路径匹配
- 方法匹配
- 参数提取
代码实现
- 查看
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 分钟)
学习目标
- 理解请求对象的扩展
- 掌握查询字符串解析
- 学习请求头处理
课程内容
请求对象概念
- 什么是请求对象
- 请求对象的扩展
- 请求对象的属性
查询字符串解析
- 查询字符串格式
- 解析算法
- 参数编码和解码
请求头处理
- 获取请求头
- 请求头大小写
- 内容类型检测
代码实现
- 查看
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 分钟)
学习目标
- 理解响应对象的扩展
- 掌握响应发送方法
- 学习状态码和响应头设置
课程内容
响应对象概念
- 什么是响应对象
- 响应对象的扩展
- 响应对象的方法
响应发送
- send() 方法
- json() 方法
- sendStatus() 方法
响应配置
- 状态码设置
- 响应头设置
- Cookie 设置
代码实现
- 查看
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 分钟)
学习目标
- 理解应用类的结构
- 掌握中间件注册机制
- 学习请求处理流程
课程内容
应用类概念
- 什么是应用类
- 应用类的职责
- 应用类的组成
中间件注册
- 应用级中间件
- 路由级中间件
- 错误处理中间件
请求处理
- 请求接收
- 中间件执行
- 路由匹配
- 响应发送
代码实现
- 查看
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 应用
- 实现路由和中间件
课程内容
应用架构
- 整合所有组件
- 设计应用结构
- 实现路由系统
中间件
- 日志中间件
- 错误处理中间件
- 认证中间件
实践操作
- 构建示例应用
- 测试应用功能
- 性能优化
实践操作
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 分钟)
学习目标
- 回顾课程内容
- 总结核心概念
- 探索扩展方向
课程内容
课程回顾
- 路由层
- 路由器
- 请求对象
- 响应对象
- 应用类
核心概念总结
- 中间件模式
- 路由系统
- 请求/响应扩展
- 错误处理
扩展方向
- 添加更多 HTTP 方法
- 实现模板引擎
- 添加静态文件服务
- 实现 Session 支持
- 添加 WebSocket 支持
实践操作
bash
# 运行所有测试
npm test
# 构建自己的应用
# 思考如何扩展功能预期输出
✅ 所有应用测试通过
✅ 所有路由器测试通过
✅ 所有请求对象测试通过
✅ 所有响应对象测试通过学习成果
完成本课程后,你将能够:
- ✅ 理解 Express 的核心架构
- ✅ 掌握路由系统的实现
- ✅ 实现中间件机制
- ✅ 扩展请求和响应对象
- ✅ 构建完整的 Web 框架
- ✅ 创建 RESTful API
- ✅ 实现错误处理
参考资源
下一步
完成本课程后,你可以继续学习:
- Express 中间件开发
- Express 模板引擎集成
- Express 认证和授权
- Express 数据库集成
- Express WebSocket 实现
- Express 性能优化
所有教学材料已保存。准备录制。

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