Appearance
Express 介绍
什么是 Express
Express 是一个基于 Node.js 平台的快速、简洁、灵活的 Web 应用框架,它提供了一系列强大的特性,用于构建 Web 和移动应用的 HTTP 服务器。Express 是目前最流行的 Node.js Web 框架之一。
Express 的历史
- 2010年:TJ Holowaychuk 创建 Express
- 2014年:Express 成为 Node.js 基金会的一部分
- 2017年:Express 4.0 发布,引入了许多新特性
- 2020年:Express 5.0 发布,带来了更多改进
Express 的特点
1. 简洁而灵活
- 极简的 API
- 灵活的中间件系统
- 可扩展的路由系统
2. 强大的路由
- 支持 RESTful API
- 路由参数
- 路由嵌套
- 路由前缀
3. 中间件系统
- 内置中间件
- 第三方中间件
- 自定义中间件
- 中间件链
4. 模板引擎支持
- 支持多种模板引擎
- EJS
- Pug
- Handlebars
- Mustache
5. 静态文件服务
- 内置静态文件服务
- 可配置的静态文件目录
- 缓存控制
6. 错误处理
- 集中式错误处理
- 自定义错误处理中间件
- 错误状态码管理
安装 Express
bash
# 初始化项目
npm init -y
# 安装 Express
npm install express第一个 Express 应用
javascript
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});Express 的核心概念
1. 应用(Application)
- 由
express()创建 - 表示整个 Express 应用
- 管理中间件和路由
- 启动 HTTP 服务器
2. 路由(Router)
- 处理 HTTP 请求
- 匹配 URL 路径
- 执行相应的处理函数
3. 中间件(Middleware)
- 处理请求和响应
- 执行特定的功能
- 可以修改请求和响应对象
- 可以终止请求-响应循环
- 可以调用下一个中间件
4. 请求(Request)
- 表示 HTTP 请求
- 包含请求参数、 headers、body 等
- 提供方法来获取请求数据
5. 响应(Response)
- 表示 HTTP 响应
- 提供方法来发送响应
- 可以设置响应状态码、headers、body 等
Express 的应用场景
1. Web 应用
- 传统网站
- 单页应用(SPA)的后端
- 内容管理系统(CMS)
2. API 服务
- RESTful API
- GraphQL API
- 微服务
3. 实时应用
- WebSocket 服务器
- 实时通信应用
- 聊天应用
4. 代理服务器
- 反向代理
- API 网关
- 负载均衡
Express 的中间件
内置中间件
express.json():解析 JSON 请求体express.urlencoded():解析 URL 编码的请求体express.static():提供静态文件服务
第三方中间件
morgan:日志中间件helmet:安全中间件cors:跨域中间件express-validator:请求验证中间件express-session:会话管理中间件
自定义中间件
javascript
app.use((req, res, next) => {
console.log('Time:', Date.now());
next();
});Express 的路由系统
基本路由
javascript
app.get('/', (req, res) => {
res.send('GET request');
});
app.post('/', (req, res) => {
res.send('POST request');
});
app.put('/', (req, res) => {
res.send('PUT request');
});
app.delete('/', (req, res) => {
res.send('DELETE request');
});路由参数
javascript
app.get('/users/:id', (req, res) => {
res.send(`User ID: ${req.params.id}`);
});路由模块化
javascript
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('Users');
});
router.get('/:id', (req, res) => {
res.send(`User ${req.params.id}`);
});
module.exports = router;
// 在主应用中使用
const usersRouter = require('./routes/users');
app.use('/users', usersRouter);Express 的错误处理
错误处理中间件
javascript
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});404 处理
javascript
app.use((req, res, next) => {
res.status(404).send('Not Found');
});Express 的最佳实践
1. 目录结构
app/
├── routes/
├── controllers/
├── models/
├── middlewares/
├── utils/
└── views/
config/
public/
app.js
package.json2. 代码组织
- 模块化设计
- 分离关注点
- 清晰的代码结构
3. 安全性
- 使用 HTTPS
- 防止 CSRF 攻击
- 防止 XSS 攻击
- 验证用户输入
- 保护敏感数据
4. 性能优化
- 使用缓存
- 压缩响应
- 合理使用中间件
- 避免同步操作
5. 测试
- 单元测试
- 集成测试
- 端到端测试
学习资源
实践练习
- 创建一个简单的 Express 应用
- 实现 RESTful API
- 使用中间件
- 处理错误
- 构建一个完整的 Web 应用