chengjie před 3 měsíci
rodič
revize
f5b69f4451
2 změnil soubory, kde provedl 197 přidání a 3 odebrání
  1. 196 0
      arch.md
  2. 1 3
      src/api/yjbdc/yjbdcController.js

+ 196 - 0
arch.md

@@ -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. 考虑引入容器化部署

+ 1 - 3
src/api/yjbdc/yjbdcController.js

@@ -449,9 +449,7 @@ export async function GetYJBDCArticleList(ctx) {
449 449
         globalCache.set(url, result, config.BufferMemoryTime);
450 450
         console.log("缓存"+config.BufferMemoryTime+"秒");
451 451
     }
452
-
453
-
454
-    //console.log(result.length);
452
+    // console.log(result.length);
455 453
 
456 454
     if (param.IsTodayCount && !param.ID){
457 455
         let count=0,unReadCount=0;