项目结构
目录树
VOCArchive/
├── src/
│ ├── app/
│ │ ├── index.tsx # 应用入口(分层中间件架构)
│ │ ├── auth.ts # 认证逻辑
│ │ ├── middleware/ # 中间件层
│ │ │ ├── database.ts # 数据库中间件
│ │ │ ├── jwt.ts # JWT 认证中间件
│ │ │ └── error-handler.ts # 错误处理中间件
│ │ ├── services/ # 服务层
│ │ │ ├── page-service.ts # 页面数据加载服务
│ │ │ └── admin-editor-service.ts # 编辑器业务逻辑服务
│ │ ├── types/ # 类型系统
│ │ │ ├── page-data.ts # 页面数据类型定义
│ │ │ └── admin-data.ts # 管理后台数据类型定义
│ │ ├── db/
│ │ │ ├── schema.ts # 数据库 Schema
│ │ │ ├── client.ts # Drizzle 客户端
│ │ │ ├── operations/ # 数据库操作(按实体分模块)
│ │ │ └── utils/ # 迁移引擎、Index 转换等
│ │ ├── routes/ # 路由配置
│ │ │ ├── api.ts # API 路由(createApiApp 工厂函数)
│ │ │ └── pages.tsx # 页面路由(createPageRoutes 工厂函数)
│ │ ├── pages/ # SSR 页面组件
│ │ └── admin/ # Admin 数据加载器
│ └── migrations/ # 数据库迁移文件
├── public/
│ ├── admin/ # Admin 前端资源
│ │ ├── js/ # Admin JS 模块
│ │ └── css/ # 样式
│ ├── css/ # 全局样式
│ ├── init/ # 初始化页面资源
│ └── sw.js # Service Worker
├── scripts/
│ ├── generate-migration-registry.js # 生成迁移注册表
│ └── generate-version-info.js # 生成版本信息
├── wrangler.toml # Cloudflare Workers 配置
└── drizzle.config.ts # Drizzle Kit 配置关键目录说明
核心应用层 (src/app/)
应用入口 (index.tsx):
- 采用分层中间件架构(从 600+ 行精简到 117 行)
- 使用工厂函数组织路由(
createApiApp(),createPageRoutes()) - 中间件执行顺序:数据库 → 路由 → 版本检查 → 初始化检查 → 错误处理
中间件层 (middleware/):
database.ts- 统一注入 DB 客户端到上下文(c.get('db'))jwt.ts- JWT 认证中间件(支持 header 和 URL 参数)error-handler.ts- 全局错误处理和自定义错误类型
服务层 (services/):
page-service.ts- 封装页面数据加载,支持并行加载优化性能admin-editor-service.ts- 封装编辑器数据加载和表单选项加载
类型系统 (types/):
page-data.ts- 页面数据类型(IndexPageData,PlayerPageData等)admin-data.ts- 管理后台数据类型(FormOptions,EditorData等)
路由配置 (routes/):
api.ts- API 路由工厂函数,包含 JWT 中间件pages.tsx- 页面路由工厂函数,调用服务层加载数据
数据库层 (src/app/db/)
操作模块 (operations/):
- 所有数据库操作按实体分模块,如:
work.ts- 作品 CRUDcreator.ts- 创作者操作search.ts- 搜索功能config.ts- 站点配置admin.ts- 管理功能
工具模块 (utils/):
index-id-converter.ts- Index ↔ ID 转换器index-utils.ts- Index 生成工具(nanoid)migration-engine.ts- 自定义迁移引擎migration-scanner.ts- 迁移文件扫描器
迁移系统 (src/migrations/)
迁移文件格式:001_description.ts, 002_description.ts ...
每个迁移文件导出:
version(number) - 版本号description(string) - 描述up(db)- 升级函数down(db)- 回滚函数(可选)
前端资源 (public/)
Admin 前端 (public/admin/js/):
core/- 认证、配置ui/- 主题、iframe 管理、内容加载api/- API 封装editor-client.js- 编辑器客户端事件处理(SSR 表单增强)
SSR 页面 (src/app/pages/):
- Hono JSX 页面组件(服务端渲染)
layouts/- 布局模板components/- 可复用组件scripts/- 客户端脚本注入
架构特点
1. 分层架构
请求
↓
中间件层(数据库、认证、错误处理)
↓
路由层(API 路由 / 页面路由)
↓
服务层(数据加载、业务逻辑)
↓
数据库操作层(CRUD、查询优化)2. 依赖注入
- 数据库客户端通过中间件注入到上下文
- 路由处理器通过
c.get('db')访问 - 避免重复创建连接,提升性能
3. 类型安全
- 所有数据结构有明确的 TypeScript 类型定义
- 服务层返回类型化的页面数据
- 端到端类型推导(数据库 → 服务层 → 路由层 → 页面组件)
4. 代码组织
- 路由层:接收请求、调用服务层、返回响应
- 服务层:封装业务逻辑、并行加载数据
- 数据库操作层:专注数据访问、查询优化
这种架构提升了代码的可维护性、可测试性和性能。