核心概念
2025/8/24大约 4 分钟
核心概念
简介
Express 是一个基于 Node.js 平台的开源 Web 应用框架,于 2010 年由 TJ Holowaychuk 创建。它旨在提供一个极简而灵活的方式来构建 Web 应用和 API。Express 自身功能简洁,但通过中间件机制可以扩展出丰富的功能。
设计理念
- 极简主义:Express 核心代码简洁,只提供基础功能
- 灵活性:通过中间件机制允许开发者根据需求定制功能
- 非侵入性:不会强制开发者遵循特定的编码风格或架构模式
- 高性能:基于 Node.js 的事件驱动、非阻塞 I/O 模型
特点
- 轻量级且高效
- 强大的路由系统
- 灵活的中间件机制
- 简化的 HTTP 请求和响应处理
- 良好的错误处理机制
- 支持模板引擎
- 丰富的第三方插件生态
架构
Express 应用本质上是一系列中间件函数的调用。理解 Express 的架构对于掌握其核心概念至关重要。
请求-响应周期
在 Express 中,一个典型的请求-响应周期如下:
- 客户端发送 HTTP 请求到服务器
- 请求被 Express 应用接收
- 请求按顺序经过一系列中间件处理
- 路由处理函数处理请求并生成响应
- 响应经过后续中间件处理
- 服务器将响应发送回客户端
应用结构
一个典型的 Express 应用结构包括:
- 应用实例:使用
express()
创建的实例 - 中间件:处理请求和响应的函数
- 路由:将请求映射到处理函数的机制
- 处理函数:处理特定请求并生成响应的函数
组件
应用对象 (App)
应用对象是 Express 应用的核心,通过 express()
函数创建:
const express = require('express');
const app = express();
应用对象具有以下主要功能:
- 配置中间件
- 定义路由
- 设置视图引擎
- 启动服务器
中间件 (Middleware)
中间件是一个函数,可以访问请求对象 (req)、响应对象 (res) 和应用程序的请求-响应周期中的下一个中间件函数 (next)。
function middleware(req, res, next) {
// 执行某些操作
next(); // 调用下一个中间件
}
中间件的类型包括:
- 应用级中间件
- 路由级中间件
- 错误处理中间件
- 内置中间件
- 第三方中间件
路由 (Router)
路由是指确定应用程序如何响应客户端对特定端点的请求,这些端点由 HTTP 方法和 URL 路径定义。
app.get('/api/users', (req, res) => {
// 处理 GET 请求
});
app.post('/api/users', (req, res) => {
// 处理 POST 请求
});
请求对象 (Request)
请求对象 (通常称为 req
) 包含客户端发送的 HTTP 请求的所有信息,如 URL、请求头、请求体等。
常用属性和方法:
req.url
:请求 URL 路径req.method
:HTTP 请求方法req.headers
:请求头req.body
:请求体(需要 body-parser 中间件)req.params
:URL 参数req.query
:查询字符串参数
响应对象 (Response)
响应对象 (通常称为 res
) 用于向客户端发送响应。
常用方法:
res.send()
:发送各种类型的响应res.json()
:发送 JSON 响应res.status()
:设置 HTTP 状态码res.render()
:渲染视图模板res.redirect()
:重定向请求res.sendFile()
:发送文件
工作原理
Express 基于 Node.js 的 http
模块构建,但提供了更高级别的抽象。当客户端发送请求时,请求会依次经过以下处理流程:
- 中间件堆栈:请求按顺序经过所有注册的中间件
- 路由匹配:Express 尝试将请求 URL 与已定义的路由匹配
- 路由处理:匹配到路由后,执行对应的处理函数
- 响应发送:处理函数生成响应并发送回客户端
- 错误处理:如果过程中发生错误,错误处理中间件会捕获并处理
与其他框架的比较
与 Koa 的比较
- Express 是 Koa 的前身,由同一团队开发
- Koa 使用 ES6+ 特性(如 async/await),而 Express 传统上使用回调
- Koa 核心更小,更注重中间件的组合
- Express 生态系统更成熟,第三方插件更多
与 NestJS 的比较
- NestJS 是一个全功能框架,基于 Express 并添加了更多结构和功能
- NestJS 使用 TypeScript,支持依赖注入和模块化架构
- Express 更灵活,而 NestJS 更规范化
- NestJS 更适合大型企业应用,Express 更适合中小型应用和 API
总结
Express 的核心概念包括应用对象、中间件、路由、请求对象和响应对象。理解这些概念是掌握 Express 的基础。Express 的设计理念是极简和灵活,通过中间件机制可以按需扩展功能。在下一章中,我们将学习如何快速入门 Express,创建你的第一个 Express 应用。