# 数据显示问题排查指南 ## 问题描述 小程序端登录成功,但管理后台的数据统计和用户管理没有显示相应的数据。 ## 快速诊断 ### 步骤 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 统一开发环境