|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+# 妙果系统服务端架构文档
|
|
|
2
|
+
|
|
|
3
|
+## 1. 系统概述
|
|
|
4
|
+
|
|
|
5
|
+妙果系统服务端是一个基于 Node.js 和 Koa 框架构建的后端服务,提供多种教育相关 API 服务,包括拼音、汉字、数学计算、自然拼读等多个教育领域的功能支持。系统采用模块化设计,支持多种微信小程序应用的后端服务需求。
|
|
|
6
|
+
|
|
|
7
|
+## 2. 技术栈
|
|
|
8
|
+
|
|
|
9
|
+- **运行环境**: Node.js v24.1.0
|
|
|
10
|
+- **Web 框架**: Koa v2.13.4
|
|
|
11
|
+- **路由**: @koa/router v13.1.0, koa-router v13.0.1
|
|
|
12
|
+- **数据库**: MySQL (mysql2 v3.14.1)
|
|
|
13
|
+- **会话管理**: koa-session v7.0.2
|
|
|
14
|
+- **文件处理**: @koa/multer v3.0.2, multer v1.4.5-lts.1
|
|
|
15
|
+- **HTTP 客户端**: axios v1.9.0
|
|
|
16
|
+- **工具库**: lodash v4.17.21, moment v2.30.1
|
|
|
17
|
+- **云服务集成**: 腾讯云 OCR、腾讯云对象存储
|
|
|
18
|
+- **其他工具**: pdfkit v0.17.1, gm v1.25.1 (图像处理)
|
|
|
19
|
+
|
|
|
20
|
+## 3. 系统架构
|
|
|
21
|
+
|
|
|
22
|
+### 3.1 目录结构
|
|
|
23
|
+
|
|
|
24
|
+```
|
|
|
25
|
+miaoguo_system_server/
|
|
|
26
|
+├── src/ # 源代码目录
|
|
|
27
|
+│ ├── api/ # API 模块目录
|
|
|
28
|
+│ │ ├── common/ # 通用 API
|
|
|
29
|
+│ │ ├── hanzi/ # 汉字学习 API
|
|
|
30
|
+│ │ ├── mathcalculate/ # 数学计算 API
|
|
|
31
|
+│ │ ├── mps/ # MPS 相关 API
|
|
|
32
|
+│ │ ├── phonics/ # 自然拼读 API
|
|
|
33
|
+│ │ ├── pinyin/ # 拼音学习 API
|
|
|
34
|
+│ │ ├── web/ # Web 相关 API
|
|
|
35
|
+│ │ └── yjbdc/ # 英语百词斩 API
|
|
|
36
|
+│ ├── config/ # 配置文件目录
|
|
|
37
|
+│ │ ├── dev.js # 开发环境配置
|
|
|
38
|
+│ │ ├── env.js # 环境变量配置
|
|
|
39
|
+│ │ ├── index.js # 主配置文件
|
|
|
40
|
+│ │ └── prod.js # 生产环境配置
|
|
|
41
|
+│ ├── middleware/ # 中间件目录
|
|
|
42
|
+│ │ ├── queryParamSanitizer.js # 查询参数清理中间件
|
|
|
43
|
+│ │ └── upload.js # 文件上传中间件
|
|
|
44
|
+│ ├── model/ # 数据模型目录
|
|
|
45
|
+│ │ ├── BufferMemoryClass.js # 缓存管理类
|
|
|
46
|
+│ │ ├── commonModel.js # 通用模型
|
|
|
47
|
+│ │ ├── hanzi.js # 汉字学习模型
|
|
|
48
|
+│ │ ├── mathcalculate.js # 数学计算模型
|
|
|
49
|
+│ │ ├── mathstar.js # 数学之星模型
|
|
|
50
|
+│ │ ├── mps.js # MPS 模型
|
|
|
51
|
+│ │ ├── phonics.js # 自然拼读模型
|
|
|
52
|
+│ │ ├── pinyin.js # 拼音学习模型
|
|
|
53
|
+│ │ └── yjbdc.js # 英语百词斩模型
|
|
|
54
|
+│ ├── util/ # 工具类目录
|
|
|
55
|
+│ │ ├── db.js # 数据库工具
|
|
|
56
|
+│ │ ├── GlobalCache.js # 全局缓存工具
|
|
|
57
|
+│ │ ├── stringClass.js # 字符串处理工具
|
|
|
58
|
+│ │ ├── WXBizDataCrypt.js # 微信数据解密工具
|
|
|
59
|
+│ │ ├── constant/ # 常量定义
|
|
|
60
|
+│ │ └── crypto/ # 加密解密工具
|
|
|
61
|
+│ ├── test/ # 测试目录
|
|
|
62
|
+│ └── app.js # 应用入口文件
|
|
|
63
|
+├── public/ # 静态资源目录
|
|
|
64
|
+├── scripts/ # 脚本目录
|
|
|
65
|
+├── doc/ # 文档目录
|
|
|
66
|
+└── package.json # 项目依赖配置
|
|
|
67
|
+```
|
|
|
68
|
+
|
|
|
69
|
+### 3.2 核心组件
|
|
|
70
|
+
|
|
|
71
|
+#### 3.2.1 应用入口 (app.js)
|
|
|
72
|
+
|
|
|
73
|
+应用入口文件负责初始化 Koa 应用实例,配置中间件,注册路由,并启动 HTTP 服务器。主要功能包括:
|
|
|
74
|
+
|
|
|
75
|
+- 配置 bodyParser 解析请求体
|
|
|
76
|
+- 配置静态文件服务
|
|
|
77
|
+- 设置错误处理中间件
|
|
|
78
|
+- 配置会话管理
|
|
|
79
|
+- 注册各模块路由
|
|
|
80
|
+- 启动服务器监听
|
|
|
81
|
+
|
|
|
82
|
+#### 3.2.2 API 模块
|
|
|
83
|
+
|
|
|
84
|
+每个 API 模块通常包含两个主要文件:
|
|
|
85
|
+- **routes.js**: 定义路由和 URL 映射
|
|
|
86
|
+- **xxxController.js**: 实现具体的业务逻辑和请求处理
|
|
|
87
|
+
|
|
|
88
|
+API 模块按功能领域划分,包括:
|
|
|
89
|
+- **common**: 通用功能,如文件上传、内容安全检查等
|
|
|
90
|
+- **hanzi**: 汉字学习相关功能
|
|
|
91
|
+- **mathcalculate**: 数学计算相关功能
|
|
|
92
|
+- **mps**: MPS 相关功能
|
|
|
93
|
+- **phonics**: 自然拼读相关功能
|
|
|
94
|
+- **pinyin**: 拼音学习相关功能
|
|
|
95
|
+- **web**: Web 端相关功能
|
|
|
96
|
+- **yjbdc**: 英语百词斩相关功能
|
|
|
97
|
+
|
|
|
98
|
+#### 3.2.3 配置管理
|
|
|
99
|
+
|
|
|
100
|
+配置管理采用环境分离的方式,通过 `process.env.NODE_ENV` 区分开发环境和生产环境:
|
|
|
101
|
+- **dev.js**: 开发环境特定配置
|
|
|
102
|
+- **prod.js**: 生产环境特定配置
|
|
|
103
|
+- **index.js**: 主配置文件,包含通用配置和环境特定配置的整合
|
|
|
104
|
+
|
|
|
105
|
+配置内容包括:
|
|
|
106
|
+- 服务器端口
|
|
|
107
|
+- 数据库连接参数
|
|
|
108
|
+- 会话配置
|
|
|
109
|
+- 微信应用配置(多个小程序的 appid 和 secret)
|
|
|
110
|
+- 云服务配置(腾讯云、百度云等)
|
|
|
111
|
+
|
|
|
112
|
+#### 3.2.4 中间件
|
|
|
113
|
+
|
|
|
114
|
+系统使用多个中间件增强功能和安全性:
|
|
|
115
|
+- **queryParamSanitizer.js**: 查询参数清理,防止注入攻击
|
|
|
116
|
+- **upload.js**: 文件上传处理
|
|
|
117
|
+- **decryptUrlMiddle**: URL 解密中间件(来自 crypto 工具)
|
|
|
118
|
+
|
|
|
119
|
+#### 3.2.5 数据模型
|
|
|
120
|
+
|
|
|
121
|
+数据模型层负责与数据库交互和业务数据处理:
|
|
|
122
|
+- **BufferMemoryClass.js**: 内存缓存管理
|
|
|
123
|
+- **commonModel.js**: 通用数据模型
|
|
|
124
|
+- 各功能模块特定模型(hanzi.js, phonics.js 等)
|
|
|
125
|
+
|
|
|
126
|
+#### 3.2.6 工具类
|
|
|
127
|
+
|
|
|
128
|
+系统包含多个工具类,提供通用功能:
|
|
|
129
|
+- **db.js**: 数据库连接和操作
|
|
|
130
|
+- **GlobalCache.js**: 全局缓存管理
|
|
|
131
|
+- **stringClass.js**: 字符串处理工具
|
|
|
132
|
+- **WXBizDataCrypt.js**: 微信数据解密
|
|
|
133
|
+- **crypto/**: 加密解密工具
|
|
|
134
|
+
|
|
|
135
|
+## 4. 数据流
|
|
|
136
|
+
|
|
|
137
|
+1. 客户端发送 HTTP 请求到服务器
|
|
|
138
|
+2. Koa 中间件链处理请求(body 解析、参数清理、会话管理等)
|
|
|
139
|
+3. 路由匹配将请求分发到对应的控制器方法
|
|
|
140
|
+4. 控制器调用模型层处理业务逻辑和数据操作
|
|
|
141
|
+5. 模型层与数据库或外部 API 交互
|
|
|
142
|
+6. 控制器接收处理结果,构造响应
|
|
|
143
|
+7. 中间件链处理响应
|
|
|
144
|
+8. 响应返回给客户端
|
|
|
145
|
+
|
|
|
146
|
+## 5. 安全机制
|
|
|
147
|
+
|
|
|
148
|
+- 使用 queryParamSanitizer 中间件防止 SQL 注入和 XSS 攻击
|
|
|
149
|
+- 会话管理使用签名 cookie 和 httpOnly 标志
|
|
|
150
|
+- 生产环境使用 secure cookie(仅 HTTPS)
|
|
|
151
|
+- 微信数据解密工具保护用户数据安全
|
|
|
152
|
+- URL 解密中间件增强 API 安全性
|
|
|
153
|
+
|
|
|
154
|
+## 6. 扩展性设计
|
|
|
155
|
+
|
|
|
156
|
+系统采用模块化设计,便于扩展新功能:
|
|
|
157
|
+1. 创建新的 API 模块目录
|
|
|
158
|
+2. 实现路由和控制器
|
|
|
159
|
+3. 创建相应的数据模型
|
|
|
160
|
+4. 在 app.js 中注册新路由
|
|
|
161
|
+
|
|
|
162
|
+## 7. 部署架构
|
|
|
163
|
+
|
|
|
164
|
+系统支持开发和生产两种环境部署:
|
|
|
165
|
+- 开发环境:使用 `npm run dev` 启动,加载开发配置
|
|
|
166
|
+- 生产环境:使用 `npm start` 启动,加载生产配置
|
|
|
167
|
+
|
|
|
168
|
+服务器要求:
|
|
|
169
|
+- Node.js v24.1.0
|
|
|
170
|
+- MySQL 数据库
|
|
|
171
|
+- 适当的网络访问权限(用于访问外部 API)
|
|
|
172
|
+
|
|
|
173
|
+## 8. 依赖服务
|
|
|
174
|
+
|
|
|
175
|
+- MySQL 数据库:存储应用数据
|
|
|
176
|
+- 腾讯云 OCR:文字识别服务
|
|
|
177
|
+- 腾讯云对象存储:文件存储服务
|
|
|
178
|
+- 微信开放平台:小程序授权和服务
|
|
|
179
|
+- 百度 AI 平台:AI 相关服务
|
|
|
180
|
+
|
|
|
181
|
+## 9. 监控与日志
|
|
|
182
|
+
|
|
|
183
|
+系统使用 console.log 进行基本日志记录,关键点包括:
|
|
|
184
|
+- 服务器启动信息
|
|
|
185
|
+- 错误处理和异常捕获
|
|
|
186
|
+- API 调用错误
|
|
|
187
|
+
|
|
|
188
|
+## 10. 未来优化方向
|
|
|
189
|
+
|
|
|
190
|
+1. 引入专业日志系统,替代 console.log
|
|
|
191
|
+2. 增强错误处理和监控机制
|
|
|
192
|
+3. 实现更完善的缓存策略
|
|
|
193
|
+4. 考虑引入 TypeScript 增强类型安全
|
|
|
194
|
+5. 增加自动化测试覆盖
|
|
|
195
|
+6. 优化数据库连接池管理
|
|
|
196
|
+7. 考虑引入容器化部署
|