一、核心概念
1. Express 简介
-
Node.js 的 Web 框架,提供 HTTP 服务器封装
-
轻量级但灵活,支持中间件扩展
-
基于路由,支持 RESTful API 和传统 MVC 架构
-
无内置 ORM 或模板引擎,但可集成第三方库
2. 核心对象
-
express()
- 创建 Express 应用 -
app
(Application 对象) - 管理全局中间件、路由、服务器 -
req
(Request 对象) - 封装 HTTP 请求信息 -
res
(Response 对象) - 封装 HTTP 响应方法 -
router
(Router 对象) - 模块化路由管理
二、核心功能
1. 路由系统
(1) 基本路由
app.METHOD(path, handler) // GET, POST, PUT, DELETE, etc.
app.all(path, handler) // 匹配所有 HTTP 方法
app.route(path) // 链式路由定义
(2) 路由参数
app.get('/users/:id', (req, res) => {
const userId = req.params.id; // 获取动态参数
});
(3) 查询字符串
app.get('/search', (req, res) => {
const query = req.query.q; // /search?q=express
});
(4) 模块化路由 (Router)
const router = express.Router();
router.get('/', (req, res) => { ... });
app.use('/api', router); // 挂载到 /api 路径
2. 中间件(Middleware)
(1) 基本概念
-
函数签名:
(req, res, next) => { ... }
-
执行顺序:按
app.use()
顺序执行 -
作用:修改请求/响应、执行额外逻辑、终止请求
(2) 中间件类型
类型 | 示例 | 说明 |
---|---|---|
应用级 | app.use(logger) | 全局中间件 |
路由级 | router.use(auth) | 路由专属中间件 |
错误处理 | (err, req, res, next) | 捕获错误 |
内置 | express.json() | 解析 JSON |
第三方 | morgan | 日志记录 |
(3) 常用内置中间件
app.use(express.json()); // 解析 JSON 请求体
app.use(express.urlencoded()); // 解析表单数据
app.use(express.static('public')); // 静态文件服务
(4) 自定义中间件示例
const logger = (req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // 继续执行后续中间件
};
app.use(logger);
3. 请求与响应处理
(1) Request (req
) 常用属性/方法
属性/方法 | 说明 |
---|---|
req.params | 路由参数 (/users/:id ) |
req.query | 查询参数 (?name=express ) |
req.body | 请求体(需 body-parser ) |
req.headers | 请求头 |
req.cookies | Cookie(需 cookie-parser ) |
(2) Response (res
) 常用方法
方法 | 说明 |
---|---|
res.send() | 发送响应(自动设置 Content-Type) |
res.json() | 发送 JSON |
res.status() | 设置状态码 |
res.redirect() | 重定向 |
res.render() | 渲染模板(需模板引擎) |
res.sendFile() | 发送文件 |
res.set() | 设置响应头 |
4. 模板引擎(可选)
(1) 常用引擎
-
EJS(嵌入式 JS)
-
Pug(缩进语法)
-
Handlebars(Mustache 风格)
(2) 配置示例
app.set('views', './views'); // 模板目录
app.set('view engine', 'ejs'); // 使用 EJS
app.get('/', (req, res) => {
res.render('index', { title: 'Express' }); // 渲染模板
});
三、高级功能
1. 错误处理
(1) 基本错误处理
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Server Error!');
});
(2) 异步错误处理
app.get('/', async (req, res, next) => {
try {
await someAsyncOperation();
} catch (err) {
next(err); // 传递给错误处理中间件
}
});
2. 静态文件服务
app.use(express.static('public')); // 访问 public/ 目录
app.use('/static', express.static('files')); // 自定义路径
3. Cookie & Session 管理
(1) Cookie
const cookieParser = require('cookie-parser');
app.use(cookieParser());
res.cookie('name', 'value', { maxAge: 900000 });
req.cookies.name; // 读取 Cookie
(2) Session
const session = require('express-session');
app.use(session({ secret: 'keyboard cat', resave: false }));
req.session.user = { name: 'John' }; // 设置 Session
4. 文件上传
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('file'), (req, res) => {
console.log(req.file); // 文件信息
});
四、安全最佳实践
1. 安全中间件
const helmet = require('helmet');
app.use(helmet()); // 设置安全 HTTP 头
2. CORS 处理
const cors = require('cors');
app.use(cors()); // 允许跨域请求
3. CSRF 防护
const csrf = require('csurf');
app.use(csrf({ cookie: true }));
4. 速率限制
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100 });
app.use(limiter);
五、部署与优化
1. 生产环境配置
-
使用
NODE_ENV=production
-
启用压缩 (
compression
中间件) -
反向代理(Nginx/Apache)
-
日志管理(
morgan
+winston
)
2. 进程管理(PM2)
pm2 start app.js --name "express-server" --watch
六、总结对比(Express vs Koa vs NestJS)
特性 | Express | Koa | NestJS |
---|---|---|---|
中间件模型 | 线性执行 | 洋葱圈 | 模块化 + 依赖注入 |
异步处理 | 回调 | async/await | async/await |
内置功能 | 较少 | 极少 | 丰富(ORM、微服务等) |
适用场景 | 传统 Web 服务 | 轻量级 API | 企业级应用 |
七、学习资源
-
Express 官方文档
-
Express 中间件列表
-
Express 最佳实践
Express 是 Node.js 最流行的 Web 框架,适合快速开发 API 和传统 Web 应用。掌握其核心概念(路由、中间件、请求/响应)后,可结合各种中间件扩展功能。