Skip to content

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.json

2. 代码组织

  • 模块化设计
  • 分离关注点
  • 清晰的代码结构

3. 安全性

  • 使用 HTTPS
  • 防止 CSRF 攻击
  • 防止 XSS 攻击
  • 验证用户输入
  • 保护敏感数据

4. 性能优化

  • 使用缓存
  • 压缩响应
  • 合理使用中间件
  • 避免同步操作

5. 测试

  • 单元测试
  • 集成测试
  • 端到端测试

学习资源

实践练习

  1. 创建一个简单的 Express 应用
  2. 实现 RESTful API
  3. 使用中间件
  4. 处理错误
  5. 构建一个完整的 Web 应用

基于 VitePress 的本地知识库