# 项目结构说明
**本文档引用的文件**
- [README.md](file://README.md)
- [package.json](file://package.json)
- [server/package.json](file://server/package.json)
- [my-uniapp-vue3/package.json](file://my-uniapp-vue3/package.json)
- [server/src/app.ts](file://server/src/app.ts)
- [server/src/config/index.ts](file://server/src/config/index.ts)
- [server/prisma/schema.prisma](file://server/prisma/schema.prisma)
- [server/src/middleware/auth.ts](file://server/src/middleware/auth.ts)
- [server/src/services/storage.service.ts](file://server/src/services/storage.service.ts)
- [my-uniapp-vue3/src/main.ts](file://my-uniapp-vue3/src/main.ts)
- [my-uniapp-vue3/src/store/user.ts](file://my-uniapp-vue3/src/store/user.ts)
- [my-uniapp-vue3/src/store/audio.ts](file://my-uniapp-vue3/src/store/audio.ts)
- [my-uniapp-vue3/src/utils/request.ts](file://my-uniapp-vue3/src/utils/request.ts)
- [my-uniapp-vue3/src/pages/index/index.vue](file://my-uniapp-vue3/src/pages/index/index.vue)
- [server/src/modules/book-generator/book-generator.controller.ts](file://server/src/modules/book-generator/book-generator.controller.ts)
## 目录
1. [项目简介](#项目简介)
2. [项目结构总览](#项目结构总览)
3. [后端服务架构](#后端服务架构)
4. [前端应用架构](#前端应用架构)
5. [分层架构设计](#分层架构设计)
6. [配置与环境管理](#配置与环境管理)
7. [构建与部署流程](#构建与部署流程)
8. [扩展性与模块化设计](#扩展性与模块化设计)
9. [性能与可靠性](#性能与可靠性)
10. [故障排查指南](#故障排查指南)
11. [结论](#结论)
## 项目简介
本项目是一个基于 AI 的有声书生成平台,提供从文本到音频的全流程自动化能力,并支持音视频内容的创作与发布。后端采用 Node.js + Koa 架构,结合 Prisma ORM 和 MySQL;前端基于 uniapp + Vue 3 + TypeScript,使用 Pinia 进行状态管理,覆盖 H5 与微信小程序等多端。
## 项目结构总览
项目采用前后端分离的模块化组织方式,核心目录如下:
- server:后端 Node.js 服务,包含模块化业务组件、中间件、配置与数据模型
- my-uniapp-vue3:前端 uniapp 应用,包含页面、状态管理、工具函数与类型定义
- deploy-package:部署打包产物,包含前端构建结果与后端配置
- docs:项目文档与部署说明
- docker-nginx:Nginx 部署配置
```mermaid
graph TB
subgraph "后端服务(server)"
A_app["应用入口
src/app.ts"]
A_cfg["配置中心
src/config/index.ts"]
A_mod["业务模块
src/modules/*"]
A_mdw["中间件
src/middleware/*"]
A_svc["服务层
src/services/*"]
A_db["数据模型
prisma/schema.prisma"]
end
subgraph "前端应用(my-uniapp-vue3)"
F_main["应用入口
src/main.ts"]
F_pages["页面组件
src/pages/*"]
F_store["状态管理
src/store/*"]
F_utils["工具函数
src/utils/*"]
F_types["类型定义
src/types/*"]
end
subgraph "部署与文档"
D_pkg["部署包
deploy-package/*"]
D_docs["文档
docs/*"]
D_nginx["Nginx配置
docker-nginx/*"]
end
F_main --> F_store
F_main --> F_pages
F_pages --> F_utils
F_store --> F_utils
F_utils --> F_types
A_app --> A_mod
A_app --> A_mdw
A_app --> A_svc
A_mod --> A_cfg
A_svc --> A_db
```
**图表来源**
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)
- [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117)
- [server/prisma/schema.prisma:1-472](file://server/prisma/schema.prisma#L1-L472)
- [my-uniapp-vue3/src/main.ts:1-32](file://my-uniapp-vue3/src/main.ts#L1-L32)
**章节来源**
- [README.md:31-52](file://README.md#L31-L52)
## 后端服务架构
后端采用 Koa 作为 Web 框架,通过模块化的方式组织业务功能,涵盖认证、TTS、播放器、收藏、偏好、搜索、分类、评论、通知、背景音乐、音频编辑、书籍生成、播放列表、草稿、视频生成、发布、签到、订阅、支付、历史记录与反馈等模块。应用启动时完成数据库连接、缓存与存储服务测试、订阅套餐初始化、WebSocket 服务启动以及书籍生成队列处理器初始化。
```mermaid
graph TB
S_app["应用入口
src/app.ts"]
S_cfg["配置中心
src/config/index.ts"]
S_auth["认证中间件
src/middleware/auth.ts"]
S_storage["存储服务
src/services/storage.service.ts"]
S_app --> S_auth
S_app --> S_cfg
S_app --> S_storage
S_app --> S_modules["业务模块路由注册
src/app.ts 行100-128"]
```
**图表来源**
- [server/src/app.ts:64-130](file://server/src/app.ts#L64-L130)
- [server/src/middleware/auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81)
- [server/src/services/storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278)
**章节来源**
- [server/src/app.ts:133-194](file://server/src/app.ts#L133-L194)
- [server/src/config/index.ts:69-117](file://server/src/config/index.ts#L69-L117)
## 前端应用架构
前端基于 uniapp + Vue 3 + TypeScript,采用 Pinia 进行状态管理,页面结构清晰,包含首页、搜索、播放器、书籍生成、专辑管理、个人中心、设置等多个页面。状态管理分为用户状态与音频播放状态两大 Store,工具函数负责网络请求、配置读取、调试输出与本地存储。
```mermaid
graph TB
F_main["应用入口
src/main.ts"]
F_user["用户状态
src/store/user.ts"]
F_audio["音频状态
src/store/audio.ts"]
F_req["请求封装
src/utils/request.ts"]
F_pages["页面组件
src/pages/*"]
F_main --> F_user
F_main --> F_audio
F_user --> F_req
F_audio --> F_req
F_pages --> F_req
F_pages --> F_user
F_pages --> F_audio
```
**图表来源**
- [my-uniapp-vue3/src/main.ts:10-31](file://my-uniapp-vue3/src/main.ts#L10-L31)
- [my-uniapp-vue3/src/store/user.ts:1-107](file://my-uniapp-vue3/src/store/user.ts#L1-L107)
- [my-uniapp-vue3/src/store/audio.ts:1-297](file://my-uniapp-vue3/src/store/audio.ts#L1-L297)
- [my-uniapp-vue3/src/utils/request.ts:1-207](file://my-uniapp-vue3/src/utils/request.ts#L1-L207)
**章节来源**
- [my-uniapp-vue3/src/pages/index/index.vue:1-758](file://my-uniapp-vue3/src/pages/index/index.vue#L1-L758)
## 分层架构设计
项目采用典型的三层架构:
- 表现层(Presentation Layer)
- 前端页面与组件负责用户交互与展示,状态管理与工具函数解耦业务逻辑
- 业务逻辑层(Business Logic Layer)
- 后端模块控制器负责接收请求、调用服务层处理业务、返回标准化响应
- 数据访问层(Data Access Layer)
- Prisma ORM 提供数据库抽象,支持 MySQL;存储服务统一对接 OSS 与本地存储
```mermaid
graph TB
P["表现层
前端页面/组件"]
B["业务逻辑层
后端模块控制器"]
D["数据访问层
Prisma ORM/存储服务"]
P --> B
B --> D
```
[此图为概念性架构图,无需图表来源]
## 配置与环境管理
后端通过 dotenv 读取环境变量,集中管理端口、数据库、JWT、模型配置与上传目录等参数;前端通过环境变量区分开发与生产环境,统一请求基地址与调试开关。存储服务支持 OSS 与本地存储无缝切换,便于开发与生产环境迁移。
```mermaid
flowchart TD
C_start["启动应用"] --> C_load_env["加载环境变量
.env/.env.local"]
C_load_env --> C_config["初始化配置
config/index.ts"]
C_config --> C_storage["检测存储类型
OSS/Local"]
C_storage --> C_db["连接数据库
Prisma"]
C_db --> C_ready["服务就绪"]
```
**图表来源**
- [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117)
- [server/src/services/storage.service.ts:139-193](file://server/src/services/storage.service.ts#L139-L193)
**章节来源**
- [server/src/config/index.ts:70-117](file://server/src/config/index.ts#L70-L117)
- [server/src/services/storage.service.ts:139-193](file://server/src/services/storage.service.ts#L139-L193)
## 构建与部署流程
- 后端构建与启动
- 开发:使用 tsx 监听模式启动,支持热更新
- 生产:TypeScript 编译为 JavaScript,运行 dist/app.js
- 前端构建与多端编译
- H5 开发与生产构建
- 微信小程序等多端构建命令
- 部署架构
- Nginx 反向代理与静态资源服务
- 前端构建产物放置于 Nginx 目录
- 后端服务独立部署,通过环境变量配置数据库与存储
```mermaid
sequenceDiagram
participant Dev as "开发者"
participant FE as "前端构建"
participant BE as "后端构建"
participant NGINX as "Nginx"
participant DB as "数据库"
Dev->>FE : npm run dev : h5 / build : mp-weixin
FE-->>NGINX : 上传构建产物
Dev->>BE : npm run build / start
BE->>DB : 连接数据库
BE-->>NGINX : 暴露 API 端点
```
**图表来源**
- [server/package.json:6-9](file://server/package.json#L6-L9)
- [my-uniapp-vue3/package.json:4-36](file://my-uniapp-vue3/package.json#L4-L36)
**章节来源**
- [README.md:62-90](file://README.md#L62-L90)
- [server/package.json:6-9](file://server/package.json#L6-L9)
- [my-uniapp-vue3/package.json:4-36](file://my-uniapp-vue3/package.json#L4-L36)
## 扩展性与模块化设计
- 模块化组织
- 后端按功能域拆分模块,每个模块包含控制器、服务与类型定义,便于独立开发与测试
- 前端按页面与功能拆分 Store、组件与工具函数,降低耦合度
- 插件化与可替换性
- 存储服务支持 OSS 与本地存储切换,便于横向扩展
- 模型配置统一管理,支持多供应商与自动切换
- 队列与异步处理
- 书籍生成采用队列与处理器,支持批量任务与断点续跑
- WebSocket 与实时通信
- 提供 WebSocket 服务,支持任务进度推送与实时交互
```mermaid
graph TB
M_auth["认证模块"]
M_tts["TTS模块"]
M_player["播放器模块"]
M_bookgen["书籍生成模块"]
M_video["视频生成模块"]
M_storage["存储服务"]
M_queue["队列服务"]
M_bookgen --> M_queue
M_bookgen --> M_storage
M_tts --> M_storage
M_player --> M_storage
```
**图表来源**
- [server/src/app.ts:26-54](file://server/src/app.ts#L26-L54)
- [server/src/modules/book-generator/book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199)
**章节来源**
- [server/src/modules/book-generator/book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119)
## 性能与可靠性
- 中间件与安全
- CORS、性能监控、日志记录、安全防护与速率限制中间件
- 认证中间件支持可选认证与测试用户降级
- 存储与缓存
- Redis 缓存连接测试与降级策略
- 存储服务支持签名 URL 与目录清理
- 错误处理与监控
- 统一错误处理与 Sentry 错误上报
- 健康检查与性能指标接口
```mermaid
flowchart TD
R_req["请求进入"] --> R_cors["CORS处理"]
R_cors --> R_perf["性能监控"]
R_perf --> R_log["请求日志"]
R_log --> R_sec["安全防护"]
R_sec --> R_auth["认证中间件"]
R_auth --> R_route["路由分发"]
R_route --> R_err["统一错误处理"]
```
**图表来源**
- [server/src/app.ts:64-83](file://server/src/app.ts#L64-L83)
- [server/src/middleware/auth.ts:7-49](file://server/src/middleware/auth.ts#L7-L49)
**章节来源**
- [server/src/app.ts:64-98](file://server/src/app.ts#L64-L98)
- [server/src/middleware/auth.ts:52-81](file://server/src/middleware/auth.ts#L52-L81)
## 故障排查指南
- 启动失败
- 检查数据库连接字符串与端口占用
- 查看 Redis 与存储服务连接日志
- 认证问题
- 确认 Authorization 头格式与 JWT Secret 一致性
- 开发环境可通过环境变量开启/关闭强制认证
- 存储问题
- 切换 STORAGE_TYPE 验证 OSS/本地存储连通性
- 检查上传目录权限与磁盘空间
- 前端请求失败
- 检查 API 基础地址与跨域配置
- 查看请求缓存与重试机制
**章节来源**
- [server/src/app.ts:133-194](file://server/src/app.ts#L133-L194)
- [server/src/middleware/auth.ts:8-18](file://server/src/middleware/auth.ts#L8-L18)
- [server/src/services/storage.service.ts:252-272](file://server/src/services/storage.service.ts#L252-L272)
- [my-uniapp-vue3/src/utils/request.ts:135-159](file://my-uniapp-vue3/src/utils/request.ts#L135-L159)
## 结论
本项目通过清晰的前后端分层、模块化设计与完善的配置管理,实现了从文本到音频/视频的自动化生成与播放体验。后端以 Koa + Prisma 为基础,具备良好的扩展性与可靠性;前端以 uniapp 为核心,覆盖多端场景。通过队列与存储服务的插件化设计,平台能够灵活适配不同部署环境与业务需求。