返回项目目录
服务端框架精选项目

Express

灵活、极简且拥有庞大生态的 Node.js Web 应用框架。

主要语言JavaScript
开源许可MIT
项目类型服务端框架
维护状态活跃维护
OVERVIEW

项目概述

Express 以路由和中间件堆栈为核心,为 Node.js 提供薄而稳定的 HTTP 抽象。它不规定数据库、验证或项目结构,适合按需求组合 API、服务端页面、Webhook 和网关。

Express 是 Node.js 生态中最具影响力的 Web 框架之一。应用本质上由按顺序执行的路由与中间件函数组成,每个函数可以读取或修改 req、res,结束响应,或调用 next 将控制权交给下一层。Express 5 保留了熟悉的核心 API,同时支持 Promise/async Handler 自动把拒绝或抛错传递给错误处理中间件,并更新了路由匹配等行为。框架自身保持极简,认证、Schema 验证、数据库、日志和应用架构通常由团队从庞大的 npm 生态中组合。

当前主线Express 5
运行环境Node.js 18+
核心模型Router + Middleware
FEATURES

主要特点

Express 用少量核心概念覆盖 Node.js Web 请求处理,并把绝大多数技术选择留给应用团队。

01

极简核心

只提供路由、请求响应辅助方法和中间件编排,不强制数据库、目录结构、验证库或应用架构。

02

中间件流水线

应用级与 Router 级中间件可读取和修改请求响应、提前返回,或通过 next 继续执行后续逻辑。

03

模块化 Router

Router 可作为迷你应用组织路径、子路由和局部中间件,再挂载到不同前缀形成清晰边界。

04

异步错误传播

Express 5 会把 async Handler 的拒绝和抛错自动交给错误处理中间件,减少重复 try/catch。

05

内置基础中间件

提供 express.json、express.urlencoded 和 express.static,覆盖常见请求解析与静态资源需求。

06

广泛模板引擎支持

可配置 Pug、EJS、Handlebars 等 View Engine,也能作为纯 JSON API 或前端应用后端。

07

庞大生态与兼容性

认证、Session、上传、日志、安全、代理和数据库集成选择丰富,许多 Node 工具优先支持 Express。

08

JavaScript 与 TypeScript

原生以 JavaScript 为核心,官方文档同时提供 TypeScript 示例,社区类型定义覆盖常用 API。

USE CASES

适用场景

适合需要成熟兼容性、灵活中间件组合,或希望精确掌控后端结构与依赖的 Node.js 项目。

REST API 与 BFF

可快速组合 Router、验证、认证和数据层,为 Web 或移动端提供轻量业务接口。

Webhook 与集成服务

简单请求模型适合接收第三方回调、处理签名并调用内部服务或消息队列。

服务端渲染网站

结合模板引擎、Session、Cookie 和静态资源中间件可构建传统 Web 应用。

API 网关与代理层

路由挂载与中间件生态适合实现认证、转发、聚合、限流和响应转换。

现有 Node.js 系统

长期 API 稳定性和广泛人才储备适合维护、升级或渐进拆分大量 Express 4 应用。

自定义后端平台

团队可以在薄核心上建立自己的 Controller、Service、依赖注入和错误处理约定。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

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 等更专注性能的框架。

QUICK START

快速开始

使用 Express 5、TypeScript、Zod 和 Supertest 创建带验证、错误处理与测试的最小任务 API。

1初始化 TypeScript 项目
bash
mkdir express-tasks
cd express-tasks
npm init -y
npm install express zod
npm install --save-dev typescript tsx @types/express @types/node supertest @types/supertest
2创建带验证的 Express 应用
typescript
import 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,
  });
});
3添加 404 与错误处理中间件
typescript
import 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);
4启动 HTTP 服务
typescript
import { 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}`);
});
5使用 Supertest 测试 API
typescript
import 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 中。

ALTERNATIVES

类似项目

这些服务端框架在性能、类型安全和架构约束上提供了比 Express 更明确的默认方案。

COMPARISON

Express vs Fastify

Express 与 Fastify 都适合 Node.js HTTP 服务并采用插件或中间件组合。Express 以极简 API、兼容性和生态规模见长;Fastify 则以编译式 Schema、结构化日志和封装插件模型提供更明确的生产默认值。

比较维度ExpressFastify
核心定位极简、灵活、生态广泛的 Web 框架高性能、低开销、Schema 驱动的 Web 框架
扩展模型顺序执行的 Middleware 与 Routerregister 插件、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 通常能减少自行搭建的基础设施。迁移前应以真实中间件兼容性和压力测试为准。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 26 日
核验版本官方当前稳定版与文档主线
内容维护Docs100 编辑整理
项目维护状态活跃维护

本次核验覆盖 Express 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 12 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 12 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库