appointment_system/docs/troubleshooting/TROUBLESHOOTING_DATA.md
2025-12-19 00:37:31 +08:00

266 lines
5.9 KiB
Markdown

# 数据显示问题排查指南
## 问题描述
小程序端登录成功,但管理后台的数据统计和用户管理没有显示相应的数据。
## 快速诊断
### 步骤 1: 运行诊断脚本
```bash
cd backend
node src/scripts/diagnoseData.js
```
这个脚本会检查:
- ✅ 数据库连接状态
- ✅ 数据库名称和配置
- ✅ 数据表是否存在
- ✅ 用户数据统计
- ✅ 预约和提现数据统计
- ✅ 环境配置
### 步骤 2: 检查数据库配置
#### 后端配置 (backend/.env)
```bash
# 检查后端的数据库配置
cat backend/.env | grep DB_
```
确认以下配置:
```env
DB_HOST=localhost
DB_PORT=3306
DB_NAME=overseas_appointment
DB_USER=root
DB_PASSWORD=your_password
```
#### 管理后台配置 (admin/.env)
```bash
# 检查管理后台的 API 地址
cat admin/.env | grep VITE_API
```
确认 API 地址指向正确的后端:
```env
VITE_API_BASE_URL=http://localhost:3000
```
### 步骤 3: 检查后端日志
启动后端并查看日志:
```bash
cd backend
npm run dev
```
观察是否有以下信息:
- ✅ 数据库连接成功
- ✅ 服务器启动在正确的端口
- ⚠️ 任何错误或警告信息
### 步骤 4: 测试 API 接口
#### 测试用户列表 API
```bash
# 首先登录管理后台获取 token
curl -X POST http://localhost:3000/api/v1/admin/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "admin123"
}'
# 使用返回的 token 查询用户列表
curl -X GET "http://localhost:3000/api/v1/admin/users?page=1&limit=20" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```
#### 测试统计 API
```bash
curl -X GET "http://localhost:3000/api/v1/admin/statistics/dashboard" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```
### 步骤 5: 检查浏览器控制台
1. 打开管理后台 (http://localhost:5173)
2. 按 F12 打开开发者工具
3. 切换到 "Console" 标签
4. 切换到 "Network" 标签
5. 刷新页面,查看:
- ❌ 是否有 API 请求失败 (红色)
- ⚠️ 是否有 CORS 错误
- ⚠️ 是否有 401/403 认证错误
- ⚠️ 是否有 500 服务器错误
## 常见问题和解决方案
### 问题 1: 数据库配置不一致
**症状**: 诊断脚本显示有用户数据,但管理后台看不到
**原因**: 小程序和管理后台连接到不同的数据库
**解决方案**:
1. 检查 `backend/.env` 文件
2. 确认 `DB_NAME` 是否正确
3. 确认所有服务使用相同的数据库配置
### 问题 2: 管理后台 API 地址错误
**症状**: 浏览器控制台显示网络错误或 404
**原因**: 管理后台的 API 基础地址配置错误
**解决方案**:
1. 检查 `admin/.env``admin/.env.local`
2. 确认 `VITE_API_BASE_URL` 指向正确的后端地址
3. 重启管理后台开发服务器
```bash
cd admin
npm run dev
```
### 问题 3: CORS 跨域问题
**症状**: 浏览器控制台显示 CORS 错误
**原因**: 后端没有正确配置 CORS
**解决方案**:
检查 `backend/src/app.js` 中的 CORS 配置:
```javascript
app.use(cors({
origin: ['http://localhost:5173', 'http://localhost:5174'],
credentials: true
}));
```
### 问题 4: 认证 Token 问题
**症状**: API 返回 401 Unauthorized
**原因**: Token 过期或无效
**解决方案**:
1. 重新登录管理后台
2. 检查浏览器 localStorage 中的 token
3. 确认 token 格式正确
### 问题 5: 数据库表不存在
**症状**: 诊断脚本显示表不存在或数量不对
**原因**: 数据库迁移未执行
**解决方案**:
```bash
cd backend
npm run db:init
```
### 问题 6: 小程序使用测试数据
**症状**: 诊断脚本显示没有用户数据
**原因**: 小程序在开发模式下使用模拟的 openId
**解决方案**:
1. 检查小程序登录时传递的 code
2. 查看后端日志确认用户创建
3. 确认 `authService.js` 中的逻辑正确执行
## 数据验证清单
使用以下 SQL 直接查询数据库:
```sql
-- 连接到数据库
mysql -u root -p overseas_appointment
-- 检查用户表
SELECT COUNT(*) as total_users FROM user;
SELECT * FROM user ORDER BY created_at DESC LIMIT 5;
-- 检查预约表
SELECT COUNT(*) as total_appointments FROM appointment;
SELECT status, COUNT(*) as count FROM appointment GROUP BY status;
-- 检查提现表
SELECT COUNT(*) as total_withdrawals FROM withdrawal;
SELECT status, COUNT(*) as count FROM withdrawal GROUP BY status;
```
## 调试技巧
### 1. 启用详细日志
`backend/.env` 中添加:
```env
LOG_LEVEL=debug
NODE_ENV=development
```
### 2. 使用 Postman 测试 API
导入 Swagger 文档到 Postman:
1. 访问 http://localhost:3000/api-docs.json
2. 在 Postman 中导入 JSON
3. 逐个测试 API 接口
### 3. 检查数据库连接池
`backend/src/config/database.js` 中添加日志:
```javascript
const sequelize = new Sequelize(/* ... */, {
logging: console.log, // 启用 SQL 日志
// ...
});
```
### 4. 监控网络请求
在管理后台的 `admin/src/utils/api.js` 中添加请求拦截器日志:
```javascript
api.interceptors.request.use(config => {
console.log('API Request:', config.method.toUpperCase(), config.url);
return config;
});
api.interceptors.response.use(
response => {
console.log('API Response:', response.status, response.data);
return response;
},
error => {
console.error('API Error:', error.response?.status, error.response?.data);
return Promise.reject(error);
}
);
```
## 联系支持
如果以上步骤都无法解决问题,请提供以下信息:
1. 诊断脚本的完整输出
2. 后端启动日志
3. 浏览器控制台的错误信息
4. Network 标签中失败的 API 请求详情
5. 数据库查询结果
## 预防措施
为避免将来出现类似问题:
1. ✅ 使用统一的环境配置管理
2. ✅ 在 `.env.example` 中记录所有必需的配置项
3. ✅ 添加健康检查端点
4. ✅ 实施完整的错误日志记录
5. ✅ 定期备份数据库
6. ✅ 使用 Docker 统一开发环境