用途
express-production 是一个面向生产环境 Express.js 开发的技能,用于构建生产级 REST API、微服务架构、安全 Web 应用,以及需要对请求/响应生命周期做细粒度控制的系统。它适合需要灵活中间件组合、完整错误处理、较全面测试与高可用部署的场景。
Express 本身是 Node.js 平台的极简、灵活 Web 应用框架。资料中将其与其他框架对比为:Express 灵活性最大、不带倾向性、生态广泛;Fastify 侧重性能与基于 schema 的校验;Koa 采用现代 async/await、极简;NestJS 以 TypeScript 优先、倾向性强、面向企业模式。
主要能力
中间件架构
- 中间件可访问请求对象 req、响应对象 res 与下一个中间件函数 next
- 分为应用级(app.use() 或 app.METHOD())、路由级(router.use() 或 router.METHOD())、错误处理(四个参数 err, req, res, next)、内置(express.json()、express.static())、第三方(helmet、cors、morgan)
- 中间件顺序是关键。资料给出的正确顺序为:安全头(最先)→ CORS → 限流(解析之前)→ 请求解析 → 压缩 → 日志 → 静态文件 → 自定义中间件 → 路由 → 404 处理(所有路由之后)→ 错误处理(最后)
- 反面示例:路由先于安全、错误处理器先于路由、解析在路由之后
- 自定义中间件模式包含请求 ID、请求计时、认证与授权
- 中间件组合:提供 compose 工具函数与条件中间件写法
结构化错误处理
- 自定义错误类 AppError,带 statusCode、status、isOperational
- 错误继承体系:AppError、ValidationError、AuthenticationError、AuthorizationError、NotFoundError、ConflictError
- 集中式错误中间件:开发环境返回完整错误与堆栈,生产环境仅对可操作错误返回消息,未知错误统一返回 500 且不泄露细节
- 专项错误处理:Mongoose CastError、重复键(code 11000)、ValidationError,以及 JWT 的 JsonWebTokenError 与 TokenExpiredError
- 异步错误:catchAsync 包装器将 Promise 拒绝交给 next(),资料同时指出不加捕获的 async 路由会导致未处理拒绝
- 进程级兜底:unhandledRejection、uncaughtException、SIGTERM 优雅关闭
安全加固
- Helmet 配置涵盖 Content Security Policy 指令、HSTS(maxAge 31536000、includeSubDomains、preload)、frameguard deny、noSniff、xssFilter、referrerPolicy
- CORS 配置示例以环境变量 ALLOWED_ORIGINS 拆分来源,credentials 为 true,限定方法与允许头
- 限流使用 express-rate-limit,示例为 15 分钟窗口、每 IP 100 次、挂载于 /api/
- 请求体积限制(示例 limit 为 10mb)与输入校验(express-validator)
测试与部署
- 测试使用 Supertest 与 Jest,目录区分 unit 与 integration
- 部署使用 PM2 集群,附带 ecosystem.config.js
- 优雅关闭与零停机部署模式
使用方式
安装命令(资料原文):
# Basic Express
npm install express
# Production stack
npm install express helmet cors express-rate-limit express-validator
npm install morgan winston compression
npm install dotenv
# Development tools
npm install -D nodemon supertest jest
# Optional: Database and auth
npm install mongoose jsonwebtoken bcrypt
最小服务器示例(server.js):使用 express.json() 与 express.urlencoded({ extended: true }),定义 GET / 返回 JSON 消息、GET /health 返回状态与 uptime,末尾注册错误处理中间件,并在 SIGTERM 时关闭服务器。
开发运行:
npm install -D nodemon
npx nodemon server.js
# 或在 package.json 中添加 npm run dev
推荐的生产项目结构(资料原文):
project/
├── src/
│ ├── app.js # Express app factory
│ ├── server.js # Server entry point
│ ├── config/
│ │ ├── index.js # Configuration management
│ │ └── logger.js # Winston logger setup
│ ├── middleware/
│ │ ├── errorHandler.js # Centralized error handling
│ │ ├── validation.js # Input validation
│ │ ├── auth.js # Authentication middleware
│ │ └── rateLimiter.js # Rate limiting
│ ├── routes/
│ │ ├── index.js # Route aggregator
│ │ ├── users.js # User routes
│ │ └── api/ # API versioning
│ ├── controllers/
│ │ ├── userController.js
│ │ └── authController.js
│ ├── models/ # Data models
│ ├── services/ # Business logic
│ ├── utils/
│ │ ├── AppError.js # Custom error class
│ │ └── catchAsync.js # Async wrapper
│ └── tests/
│ ├── unit/
│ └── integration/
├── ecosystem.config.js # PM2 configuration
├── .env.example # Environment template
├── nodemon.json # Nodemon config
└── package.json
适用场景
构建生产级 REST API;搭建微服务架构;实现安全 Web 应用;需要灵活中间件组合;需要完整错误处理;需要较全面测试的系统;部署高可用服务;需要对请求/响应生命周期做细粒度控制。
限制
资料未提供具体的性能基准、版本兼容性要求、许可信息,也未提供各部署环境(如云平台、容器编排)的具体配置步骤。所涉及的数据库与认证库(mongoose、jsonwebtoken、bcrypt)在资料中标注为可选,是否采用取决于项目需求。