Skip to content

fwx5618177/Prexis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Prexis

English Documentation

什么是 Prexis?

Prexis 是一个基于 Express 的企业级 Node.js API 开发框架,专为构建生产环境的后端服务而设计。

如果你用过 Express,你一定知道它的灵活性是把双刃剑——上手快,但构建正式项目时需要自己选型和集成大量中间件、工具链、项目结构。Prexis 解决的正是这个问题:它是一套经过生产验证的 Express 最佳实践集合,让你专注于业务逻辑,而不是重复造轮子。

为什么选择 Prexis?

与原生 Express 对比

维度 原生 Express Prexis
项目结构 需自行规划 标准化模块架构,开箱即用
类型安全 需手动配置 TypeScript 完整 TypeScript 支持,类型定义完善
请求验证 需集成第三方库 内置 class-validator 声明式校验
错误处理 基础中间件 统一异常处理,结构化错误响应
API 文档 需手动编写 Swagger 自动生成
安全防护 需逐一配置 Helmet/CORS/HPP/Rate Limit 预配置
数据库 Prisma ORM 集成
认证授权 需自行实现 JWT 认证开箱即用
容错机制 熔断器模式内置
测试覆盖 需自行搭建 Vitest 测试框架,200+ 用例
部署方案 需自行编写 Docker/K8s 配置齐全

与其他框架对比

特性 Prexis NestJS Fastify
学习曲线 低(Express 基础即可) 高(需学习装饰器、依赖注入)
底层框架 Express Express/Fastify 自有
灵活性 中(强约定)
性能 高(27k+ RPS) 极高
GraphQL 内置 需安装模块 需插件
TypeScript 原生支持 强制使用 可选
企业特性 熔断器/追踪/日志 完善 需插件

Prexis 的定位:介于轻量级 Express 和重量级 NestJS 之间。保留 Express 的简洁和灵活,同时提供企业级功能,无需学习新的编程范式。

核心优势

1. 零配置启动

pnpm install && pnpm dev

无需纠结项目结构、工具链选型,clone 即用。

2. 模块化架构

每个业务领域独立成模块,包含 DTO、Service、Controller、Route:

src/modules/users/
├── dtos/           # 数据传输对象
├── services/       # 业务逻辑
├── controllers/    # 请求处理
└── routes/         # 路由定义

3. CLI 脚手架

一键生成标准模块,保持代码风格统一:

pnpm gen product    # 自动创建 product 模块全部文件

4. 生产级可靠性

  • 熔断器:防止级联故障,服务自动降级恢复
  • 速率限制:防止 API 滥用
  • 结构化日志:Winston + 日志轮转
  • 分布式追踪:OpenTelemetry 集成

5. 高性能

PM2 集群模式下达到 27,600+ RPS,p99 延迟仅 15ms。

适用场景

  • 中小型后端 API 服务
  • 需要快速交付的 MVP 项目
  • Express 技术栈团队的升级选择
  • 需要 REST + GraphQL 双协议的场景
  • 对可维护性有要求的长期项目

核心特性

开发体验

  • TypeScript 支持 - 完整的类型安全,提升代码质量和开发效率
  • 模块化架构 - 清晰的目录结构,便于团队协作和代码维护
  • CLI 代码生成 - 内置命令行工具,快速生成业务模块脚手架
  • 热重载开发 - 基于 nodemon 的开发服务器,代码修改即时生效
  • 代码规范 - ESLint + Prettier + Husky 全链路代码质量保障

API 能力

  • REST + GraphQL - 双协议支持,灵活应对不同业务场景
  • WebSocket - 内置 WS 服务,支持实时双向通信
  • Swagger 文档 - 自动生成 API 文档,支持在线测试
  • 请求验证 - 基于 class-validator 的声明式参数校验
  • JWT 认证 - 完整的用户认证和授权机制

企业级功能

  • 熔断器 - 基于 opossum 的断路器模式,防止级联故障
  • 速率限制 - 内置请求频率控制,防止 API 滥用
  • 安全中间件 - Helmet、CORS、HPP 多层安全防护
  • 结构化日志 - Winston 日志系统,支持日志轮转和多输出
  • 分布式追踪 - OpenTelemetry 集成,支持链路追踪
  • HTTP/2 支持 - 原生 HTTP/2 服务器,支持多路复用和 Server Push

部署运维

  • 容器化 - Docker / Docker Compose 一键部署
  • Kubernetes - 提供 K8s 部署配置,支持水平扩展
  • PM2 集群 - 多进程集群模式,充分利用多核 CPU
  • 健康检查 - 存活探针和就绪探针,适配容器编排
  • 发布策略 - 内置蓝绿部署、金丝雀发布配置
  • 自动扩缩容 - HPA 配置,基于 CPU 利用率自动扩缩

测试覆盖

  • Vitest 测试框架 - 200+ 单元测试用例
  • 覆盖率报告 - 完整的代码覆盖率统计
  • HTTP 测试 - 提供 REST Client 测试文件

技术栈

分类 技术 版本要求
运行时 Node.js >= 20.10.0
语言 TypeScript 5.9+
Web 框架 Express 4.22+
网络协议 HTTP/1.1, HTTP/2 -
数据库 ORM Prisma 6.x
API 协议 REST, GraphQL 16.x
容错组件 opossum 9.x
构建工具 SWC -
包管理 pnpm >= 9.0.0
测试框架 Vitest -
容器化 Docker, Kubernetes -

性能基准

测试环境:MacBook Pro (14 核 Apple Silicon)

运行模式 平均 RPS 最大 RPS 平均延迟 p99 延迟 性能提升
单进程 8,570 8,879 5.33ms 9ms 基准
PM2 集群 (14核) 27,608 33,983 1.34ms 15ms 3.2x

测试配置:

  • 工具:autocannon -c 50 -d 10
  • 端点:GET /health
  • 环境:Node.js 20+,生产模式

快速开始

环境要求

  • Node.js >= 20.10.0
  • pnpm >= 9.0.0

安装与运行

# 克隆项目
git clone https://github.com/fwx5618177/prexis.git
cd prexis

# 安装依赖
pnpm install

# 配置环境变量
cp .env.example .env

# 启动开发服务器
pnpm dev

服务启动后访问:

项目结构

prexis/
├── src/
│   ├── app.ts                 # Express 应用配置
│   ├── server.ts              # 服务入口
│   ├── routes.ts              # 路由注册
│   ├── config/                # 配置管理
│   ├── exceptions/            # 自定义异常
│   ├── middlewares/           # 中间件
│   │   ├── auth.middleware.ts       # JWT 认证
│   │   ├── cors.middlewares.ts      # CORS 配置
│   │   ├── csrf.middleware.ts       # CSRF 防护
│   │   ├── error.middleware.ts      # 错误处理
│   │   ├── rateLimit.middleware.ts  # 速率限制
│   │   ├── requestId.middleware.ts  # 请求 ID
│   │   ├── telemetry.middleware.ts  # 链路追踪
│   │   └── validation.middleware.ts # 参数验证
│   ├── modules/               # 业务模块
│   │   ├── auth/              # 认证模块
│   │   ├── users/             # 用户模块
│   │   ├── health/            # 健康检查
│   │   ├── graphql/           # GraphQL 模块
│   │   ├── websocket/         # WebSocket 模块
│   │   └── worker/            # Worker 线程模块
│   ├── services/              # 公共服务
│   │   ├── circuit-breaker.service.ts  # 熔断器
│   │   ├── http2.service.ts            # HTTP/2 支持
│   │   ├── performance.service.ts      # 性能优化
│   │   ├── redis.service.ts            # Redis 客户端
│   │   └── worker.service.ts           # Worker 线程池
│   ├── shared/                # 共享工具
│   ├── types/                 # TypeScript 类型定义
│   └── utils/                 # 工具函数
├── cli/                       # CLI 代码生成工具
├── prisma/                    # Prisma 数据库配置
├── tests/                     # 测试用例
├── http/                      # HTTP 测试文件
├── docs/                      # 文档
└── benchmark/                 # 性能测试脚本

常用命令

开发

pnpm dev              # 启动开发服务器(热重载)
pnpm build            # 构建生产版本
pnpm start            # 启动生产服务
pnpm start:cluster    # PM2 集群模式启动

测试

pnpm test             # 运行测试
pnpm test:watch       # 监听模式测试
pnpm test:coverage    # 生成覆盖率报告

代码质量

pnpm lint             # ESLint 检查
pnpm lint:fix         # 自动修复
pnpm format           # Prettier 格式化
pnpm typecheck        # TypeScript 类型检查

数据库

pnpm prisma:generate  # 生成 Prisma 客户端
pnpm prisma:migrate   # 执行数据库迁移

CLI 工具

Prexis 内置 CLI 工具,快速生成标准化的业务模块代码。

生成模块

# 生成完整模块(包含 dto、service、controller、route)
pnpm gen <模块名>

# 示例
pnpm gen product          # 创建 src/modules/product/
pnpm gen user-profile     # 创建 src/modules/user-profile/
pnpm gen order-item       # 创建 src/modules/order-item/

生成的模块结构:

src/modules/<模块名>/
├── index.ts
├── dtos/
│   └── <模块名>.dto.ts
├── services/
│   └── <模块名>.service.ts
├── controllers/
│   └── <模块名>.controller.ts
└── routes/
    └── <模块名>.route.ts

选项参数

pnpm gen product --no-dto         # 不生成 DTO
pnpm gen product --no-service     # 不生成 Service
pnpm gen product --no-controller  # 不生成 Controller
pnpm gen product --no-route       # 不生成 Route

其他命令

pnpm cli:list             # 列出所有现有模块
pnpm clean:examples       # 清理示例模块
pnpm clean:examples -y    # 跳过确认直接清理

注册路由

生成模块后,在 src/routes.ts 中注册:

import { ProductRoute } from '@modules/product'

const routes: Routes[] = [
  // ... 其他路由
  new ProductRoute(),
]

API 端点

端点 方法/协议 说明
/health GET 存活探针
/ready GET 就绪探针(含熔断器保护)
/circuit-breaker/status GET 熔断器状态
/api-docs GET Swagger API 文档
/graphql POST GraphQL 端点
/ws WebSocket 实时双向通信
/api/auth/login POST 用户登录
/api/auth/register POST 用户注册
/api/users GET 用户列表

Docker 部署

开发环境

docker compose --profile dev up

生产环境

docker compose --profile prod up -d

Kubernetes 部署

基础部署

kubectl apply -f k8s.yaml

蓝绿部署

蓝绿部署通过同时运行两个版本(蓝色=当前版本,绿色=新版本),实现零停机发布:

# 1. 部署新版本(绿色环境)
kubectl set image deployment/prexis-green prexis=prexis:v2.0.0

# 2. 验证新版本
kubectl rollout status deployment/prexis-green

# 3. 切换流量到新版本
kubectl patch service prexis -p '{"spec":{"selector":{"version":"green"}}}'

# 4. 回滚(如有问题)
kubectl patch service prexis -p '{"spec":{"selector":{"version":"blue"}}}'

金丝雀发布

金丝雀发布将小部分流量导向新版本,逐步验证后再全量发布:

# 1. 部署金丝雀版本(默认 replicas: 0)
kubectl scale deployment/prexis-canary --replicas=1

# 2. 金丝雀接收约 10% 流量(1/10 pods)
# 主 Deployment 9 个副本 + 金丝雀 1 个副本

# 3. 监控金丝雀指标
kubectl logs -l version=canary --tail=100

# 4. 逐步扩大金丝雀比例
kubectl scale deployment/prexis-canary --replicas=3
kubectl scale deployment/prexis --replicas=7

# 5. 全量发布
kubectl set image deployment/prexis prexis=prexis:v2.0.0
kubectl scale deployment/prexis-canary --replicas=0

自动扩缩容

项目内置 HPA 配置,基于 CPU 利用率自动扩缩:

# 查看 HPA 状态
kubectl get hpa prexis-hpa

# 手动调整副本数范围
kubectl patch hpa prexis-hpa -p '{"spec":{"minReplicas":3,"maxReplicas":20}}'

贡献指南

欢迎参与贡献!请阅读 CONTRIBUTING.md 了解如何参与项目开发。

参与本项目即表示你同意遵守我们的 行为准则

许可证

本项目采用 MIT 许可证开源。

Copyright (c) 2024-present fwx5618177

About

Have docker, express

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 2

  •  
  •