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