基于 Express 框架构建高性能、可扩展的 RESTful API 服务,采用模块化架构设计,涵盖从基础到进阶的完整技术栈。
基于事件驱动的非阻塞 I/O 模型,单线程高效处理数万并发连接
灵活的中间件架构,轻松扩展请求处理流程,实现关注点分离
RESTful 风格路由设计,支持参数解析、正则匹配、路由分组
内置安全中间件,防范 XSS、CSRF、SQL 注入等常见攻击
拥有全球最大的包管理生态,超过 200 万个开源包可用
原生支持 WebSocket,轻松构建实时聊天、推送等功能
理解事件循环是掌握 Node.js 的关键。事件循环使得 Node.js 能够执行非阻塞 I/O 操作,尽管 JavaScript 是单线程的。
同步代码 > process.nextTick > Promise.then > setTimeout/setImmediate
Express 中间件是按顺序执行的函数,可以访问请求对象、响应对象和下一个中间件函数。中间件可以执行任何代码、修改请求和响应对象、结束请求-响应循环、调用下一个中间件。
| 中间件 | 功能 | 使用示例 |
|---|---|---|
express.json() |
解析 JSON 请求体 | app.use(express.json()) |
cors |
处理跨域请求 | app.use(cors({ origin: '*' })) |
helmet |
设置安全 HTTP 头 | app.use(helmet()) |
morgan |
HTTP 请求日志 | app.use(morgan('combined')) |
compression |
Gzip 压缩响应 | app.use(compression()) |
express-rate-limit |
请求频率限制 | app.use(rateLimit({ max: 100 })) |
express-validator |
请求参数验证 | body('email').isEmail() |
错误处理中间件必须放在最后,且必须有4个参数 (err, req, res, next),否则不会被识别为错误处理中间件。
| HTTP 方法 | 路由示例 | 操作 | 幂等性 |
|---|---|---|---|
GET |
/api/users | 获取用户列表 | 是 |
GET |
/api/users/:id | 获取单个用户 | 是 |
POST |
/api/users | 创建用户 | 否 |
PUT |
/api/users/:id | 全量更新用户 | 是 |
PATCH |
/api/users/:id | 部分更新用户 | 是 |
DELETE |
/api/users/:id | 删除用户 | 是 |
使用 compression 中间件压缩响应体,减少传输大小
为常用查询字段创建索引,使用 explain() 分析查询
复用数据库连接,避免频繁创建销毁连接
查询时使用 lean() 返回纯 JS 对象,减少内存占用
遵循单一职责原则:Routes 定义路由 → Controllers 处理请求 → Services 实现业务 → Models 操作数据。每层只关注自己的职责,便于测试和维护。