Express
灵活、极简且拥有庞大生态的 Node.js Web 应用框架。
项目概述
Express 以路由和中间件堆栈为核心,为 Node.js 提供薄而稳定的 HTTP 抽象。它不规定数据库、验证或项目结构,适合按需求组合 API、服务端页面、Webhook 和网关。
Express 是 Node.js 生态中最具影响力的 Web 框架之一。应用本质上由按顺序执行的路由与中间件函数组成,每个函数可以读取或修改 req、res,结束响应,或调用 next 将控制权交给下一层。Express 5 保留了熟悉的核心 API,同时支持 Promise/async Handler 自动把拒绝或抛错传递给错误处理中间件,并更新了路由匹配等行为。框架自身保持极简,认证、Schema 验证、数据库、日志和应用架构通常由团队从庞大的 npm 生态中组合。
主要特点
Express 用少量核心概念覆盖 Node.js Web 请求处理,并把绝大多数技术选择留给应用团队。
极简核心
只提供路由、请求响应辅助方法和中间件编排,不强制数据库、目录结构、验证库或应用架构。
中间件流水线
应用级与 Router 级中间件可读取和修改请求响应、提前返回,或通过 next 继续执行后续逻辑。
模块化 Router
Router 可作为迷你应用组织路径、子路由和局部中间件,再挂载到不同前缀形成清晰边界。
异步错误传播
Express 5 会把 async Handler 的拒绝和抛错自动交给错误处理中间件,减少重复 try/catch。
内置基础中间件
提供 express.json、express.urlencoded 和 express.static,覆盖常见请求解析与静态资源需求。
广泛模板引擎支持
可配置 Pug、EJS、Handlebars 等 View Engine,也能作为纯 JSON API 或前端应用后端。
庞大生态与兼容性
认证、Session、上传、日志、安全、代理和数据库集成选择丰富,许多 Node 工具优先支持 Express。
JavaScript 与 TypeScript
原生以 JavaScript 为核心,官方文档同时提供 TypeScript 示例,社区类型定义覆盖常用 API。
适用场景
适合需要成熟兼容性、灵活中间件组合,或希望精确掌控后端结构与依赖的 Node.js 项目。
REST API 与 BFF
可快速组合 Router、验证、认证和数据层,为 Web 或移动端提供轻量业务接口。
Webhook 与集成服务
简单请求模型适合接收第三方回调、处理签名并调用内部服务或消息队列。
服务端渲染网站
结合模板引擎、Session、Cookie 和静态资源中间件可构建传统 Web 应用。
API 网关与代理层
路由挂载与中间件生态适合实现认证、转发、聚合、限流和响应转换。
现有 Node.js 系统
长期 API 稳定性和广泛人才储备适合维护、升级或渐进拆分大量 Express 4 应用。
自定义后端平台
团队可以在薄核心上建立自己的 Controller、Service、依赖注入和错误处理约定。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Express 擅长的地方
- API 简单、概念少,新成员容易快速理解请求处理流程
- 生态庞大,常见认证、Session、上传和数据库都有成熟集成
- 不绑定架构和数据层,适合渐进接入现有 Node.js 系统
- Router 与中间件可灵活组合,并能按路径隔离功能
- Express 5 改善 async Handler 的错误传播体验
- 社区规模、案例、人才和长期兼容经验非常丰富
需要注意
采用前应考虑的问题
灵活性会把目录、依赖注入、Service 边界和团队规范交给使用者,大型项目容易出现结构不一致。
req.body、req.query 和 req.params 都来自不可信输入,TypeScript 类型不能替代 Zod、Joi 等运行时验证。
解析器、认证、路由、404 和错误处理的注册顺序非常重要,遗漏 next 或错误放置可能导致请求挂起或绕过保护。
错误处理函数必须保留 err、req、res、next 四个参数;生产响应还应避免泄露堆栈和内部信息。
只有在明确代理拓扑时才能启用 trust proxy,否则客户端可能伪造 X-Forwarded-* 并影响 IP、协议或安全判断。
Express 不提供编译式 Schema 和响应序列化;高吞吐场景应实测,并考虑 Fastify 等更专注性能的框架。
快速开始
使用 Express 5、TypeScript、Zod 和 Supertest 创建带验证、错误处理与测试的最小任务 API。
bashmkdir express-tasks
cd express-tasks
npm init -y
npm install express zod
npm install --save-dev typescript tsx @types/express @types/node supertest @types/supertesttypescriptimport express from "express";
import { z } from "zod";
const CreateTask = z.object({
title: z.string().trim().min(1).max(120),
});
export const app = express();
app.disable("x-powered-by");
app.use(express.json({ limit: "100kb" }));
app.get("/health", (_req, res) => {
res.json({ status: "ok" });
});
app.post("/api/tasks", (req, res) => {
const input = CreateTask.parse(req.body);
res.status(201).json({
id: crypto.randomUUID(),
title: input.title,
completed: false,
});
});typescriptimport type {
ErrorRequestHandler,
RequestHandler,
} from "express";
import { ZodError } from "zod";
export const notFound: RequestHandler = (_req, res) => {
res.status(404).json({ error: "Not found" });
};
export const handleError: ErrorRequestHandler = (
error,
_req,
res,
_next,
) => {
if (error instanceof ZodError) {
res.status(422).json({
error: "Validation failed",
issues: error.issues,
});
return;
}
console.error(error);
res.status(500).json({ error: "Internal server error" });
};
app.use(notFound);
app.use(handleError);typescriptimport { app } from "./app.js";
const port = Number(process.env.PORT ?? 3000);
app.listen(port, "127.0.0.1", () => {
console.log(`Express listening on http://127.0.0.1:${port}`);
});typescriptimport assert from "node:assert/strict";
import test from "node:test";
import request from "supertest";
import { app } from "../src/app.js";
test("creates a task", async () => {
const response = await request(app)
.post("/api/tasks")
.send({ title: "学习 Express" })
.expect(201);
assert.equal(response.body.title, "学习 Express");
assert.equal(response.body.completed, false);
});下一步:尽早统一 Router 分层、输入 Schema、错误格式、日志和安全中间件;不要让业务逻辑直接散落在 req/res Handler 中。
类似项目
这些服务端框架在性能、类型安全和架构约束上提供了比 Express 更明确的默认方案。
Fastify
面向 Node.js 的高性能低开销 Web 框架,拥有成熟的插件与 JSON Schema 生态。
查看项目Hono
基于 Web 标准、轻量快速且可运行于多种 JavaScript 环境的 Web 框架。
查看项目NestJS
使用 TypeScript 构建高效、可扩展企业级 Node.js 服务端应用的渐进式框架。
查看项目AdonisJS
面向 Node.js 与 TypeScript、强调约定和完整工具链的后端优先 Web 框架。
查看项目Koa
由 Express 原团队打造、以 async 洋葱中间件为核心的极简 Node.js Web 框架。
查看项目Restify
专注构建语义清晰、可观测 REST 服务的 Node.js 框架。
访问官网Express vs Fastify
Express 与 Fastify 都适合 Node.js HTTP 服务并采用插件或中间件组合。Express 以极简 API、兼容性和生态规模见长;Fastify 则以编译式 Schema、结构化日志和封装插件模型提供更明确的生产默认值。
| 比较维度 | Express | Fastify |
|---|---|---|
| 核心定位 | 极简、灵活、生态广泛的 Web 框架 | 高性能、低开销、Schema 驱动的 Web 框架 |
| 扩展模型 | 顺序执行的 Middleware 与 Router | register 插件、Hook、Decorator 与封装上下文 |
| 输入验证 | 自行选择 Zod、Joi、Celebrate 等方案 | 内置 JSON Schema 与 Ajv 编译验证 |
| 响应序列化 | res.json 使用常规 JSON 序列化 | 响应 Schema 配合 fast-json-stringify |
| 日志 | 自行集成 Pino、Winston、Morgan 等 | 内置 Pino 请求级结构化日志 |
| 生态兼容 | 历史最久、第三方 Middleware 和教程极多 | 官方插件体系成熟,但 Express Middleware 需适配 |
| 更适合 | 渐进式系统、广泛兼容和自定义架构 | 高吞吐 API、Schema 契约和明确模块边界 |
如果项目依赖大量现成 Express Middleware、团队熟悉其模型,或需要以最少约束接入旧系统,Express 仍是可靠选择;如果新服务重视性能、统一 Schema、结构化日志和插件封装,Fastify 通常能减少自行搭建的基础设施。迁移前应以真实中间件兼容性和压力测试为准。
资料核验
版本、维护信息与本页采用的官方资料来源。
本次核验覆盖 Express 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 12 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。