Express简介 #
一、什么是Express? #
Express.js是一个基于Node.js平台的快速、开放、极简的Web开发框架。它为Web和移动应用提供了一系列强大的功能。
1.1 Express的定义 #
Express是一个最小化且灵活的Node.js Web应用框架,为Web和移动应用提供了一套强大的功能:
javascript
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
1.2 Express的定位 #
Express在Node.js生态中的位置:
text
HTTP模块(底层)
↓
Connect(中间件框架)
↓
Express(Web框架)
↓
应用层(你的应用)
二、发展历史 #
2.1 诞生背景 #
| 时间 | 事件 |
|---|---|
| 2009年 | Node.js诞生 |
| 2010年 | Connect框架发布 |
| 2010年11月 | Express由TJ Holowaychuk创建 |
| 2014年 | StrongLoop接管维护 |
| 2016年 | Node.js基金会接管 |
| 至今 | 持续更新迭代 |
2.2 版本演进 #
text
Express 3.x → Express 4.x(重大更新)→ Express 5.x(开发中)
Express 4.x 主要变化:
- 移除内置中间件
- 引入Router模块
- 改进路由系统
- 更好的错误处理
三、核心特点 #
3.1 精简设计 #
Express核心非常精简,只提供最基础的功能:
javascript
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.json({ message: 'Express is minimal!' });
});
app.listen(3000);
3.2 中间件架构 #
Express的核心是中间件系统,请求会依次经过各个中间件:
text
请求 → 中间件1 → 中间件2 → 中间件3 → 路由处理 → 响应
javascript
app.use((req, res, next) => {
console.log('第一个中间件');
next();
});
app.use((req, res, next) => {
console.log('第二个中间件');
next();
});
app.get('/', (req, res) => {
res.send('路由处理');
});
3.3 路由系统 #
强大的路由系统支持各种HTTP方法:
javascript
app.get('/users', (req, res) => {
res.send('获取用户列表');
});
app.post('/users', (req, res) => {
res.send('创建用户');
});
app.put('/users/:id', (req, res) => {
res.send('更新用户');
});
app.delete('/users/:id', (req, res) => {
res.send('删除用户');
});
3.4 模板引擎支持 #
支持多种模板引擎:
javascript
app.set('view engine', 'ejs');
app.set('views', './views');
app.get('/', (req, res) => {
res.render('index', { title: 'Express' });
});
3.5 静态文件服务 #
内置静态文件服务:
javascript
app.use(express.static('public'));
四、Express vs 其他框架 #
4.1 与Koa对比 #
| 特性 | Express | Koa |
|---|---|---|
| 设计理念 | 回调函数 | async/await |
| 中间件 | 线性模型 | 洋葱模型 |
| 内置功能 | 较多 | 极简 |
| 学习曲线 | 较低 | 中等 |
| 生态成熟度 | 成熟 | 发展中 |
4.2 与NestJS对比 #
| 特性 | Express | NestJS |
|---|---|---|
| 类型 | Web框架 | 企业级框架 |
| 架构 | 无限制 | MVC/模块化 |
| TypeScript | 可选 | 原生支持 |
| 学习曲线 | 低 | 高 |
| 适用场景 | 中小型项目 | 大型企业项目 |
4.3 与Hapi对比 #
| 特性 | Express | Hapi |
|---|---|---|
| 配置方式 | 代码配置 | 配置驱动 |
| 插件系统 | 中间件 | 插件 |
| 验证 | 需要额外中间件 | 内置Joi |
| 学习曲线 | 低 | 中等 |
五、应用场景 #
5.1 RESTful API #
javascript
const express = require('express');
const app = express();
app.use(express.json());
let users = [];
app.get('/api/users', (req, res) => {
res.json(users);
});
app.post('/api/users', (req, res) => {
const user = { id: Date.now(), ...req.body };
users.push(user);
res.status(201).json(user);
});
app.listen(3000);
5.2 Web应用 #
javascript
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
res.render('home', { title: '首页' });
});
app.get('/about', (req, res) => {
res.render('about', { title: '关于' });
});
app.listen(3000);
5.3 单页应用后端 #
javascript
const express = require('express');
const path = require('path');
const app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
app.listen(3000);
5.4 微服务 #
javascript
const express = require('express');
const app = express();
app.get('/health', (req, res) => {
res.json({ status: 'healthy' });
});
app.get('/api/service-a/data', (req, res) => {
res.json({ service: 'A', data: [] });
});
app.listen(3001);
六、Express生态系统 #
6.1 核心模块 #
| 模块 | 说明 |
|---|---|
| express | 核心框架 |
| router | 路由模块 |
| static | 静态文件服务 |
6.2 常用中间件 #
| 中间件 | 说明 |
|---|---|
| body-parser | 请求体解析 |
| cors | 跨域处理 |
| morgan | 日志记录 |
| helmet | 安全头设置 |
| compression | 响应压缩 |
| cookie-parser | Cookie解析 |
| express-session | 会话管理 |
6.3 模板引擎 #
| 引擎 | 说明 |
|---|---|
| EJS | 嵌入式JavaScript模板 |
| Pug | 缩进式模板引擎 |
| Handlebars | 逻辑少模板引擎 |
| Nunjucks | 模板继承支持 |
七、为什么选择Express? #
7.1 优点 #
1. 学习曲线平缓
javascript
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello'));
app.listen(3000);
几行代码就能启动一个服务器。
2. 灵活性高
不强制任何项目结构、模板引擎或数据库。
3. 社区活跃
- GitHub Stars: 60k+
- npm周下载量: 2000万+
- 丰富的第三方中间件
4. 文档完善
官方文档详细,社区教程丰富。
5. 生产验证
被众多大公司使用,经过生产环境验证。
7.2 适用场景 #
- RESTful API服务
- 单页应用后端
- 传统Web应用
- 微服务架构
- 实时应用(配合Socket.io)
八、Express核心概念 #
8.1 应用对象(app) #
javascript
const express = require('express');
const app = express();
app.set('title', 'My App');
app.get('title');
app.locals.title = 'My App';
8.2 请求对象(req) #
javascript
app.get('/user/:id', (req, res) => {
console.log(req.params.id);
console.log(req.query.page);
console.log(req.headers['user-agent']);
console.log(req.body);
});
8.3 响应对象(res) #
javascript
app.get('/', (req, res) => {
res.status(200);
res.json({ message: 'Success' });
res.send('Hello');
res.render('index');
res.redirect('/login');
});
8.4 路由(Router) #
javascript
const router = express.Router();
router.get('/', (req, res) => {
res.send('Home');
});
app.use('/api', router);
九、总结 #
Express.js是一个轻量、灵活、强大的Node.js Web框架:
| 特点 | 说明 |
|---|---|
| 轻量 | 核心功能精简 |
| 灵活 | 不强制架构 |
| 强大 | 中间件系统 |
| 成熟 | 社区活跃 |
下一步,让我们开始安装和配置Express开发环境!
最后更新:2026-03-28