appointment_system/TROUBLESHOOTING_DATA.md
2025-12-11 22:50:18 +08:00

5.9 KiB

数据显示问题排查指南

问题描述

小程序端登录成功,但管理后台的数据统计和用户管理没有显示相应的数据。

快速诊断

步骤 1: 运行诊断脚本

cd backend
node src/scripts/diagnoseData.js

这个脚本会检查:

  • 数据库连接状态
  • 数据库名称和配置
  • 数据表是否存在
  • 用户数据统计
  • 预约和提现数据统计
  • 环境配置

步骤 2: 检查数据库配置

后端配置 (backend/.env)

# 检查后端的数据库配置
cat backend/.env | grep DB_

确认以下配置:

DB_HOST=localhost
DB_PORT=3306
DB_NAME=overseas_appointment
DB_USER=root
DB_PASSWORD=your_password

管理后台配置 (admin/.env)

# 检查管理后台的 API 地址
cat admin/.env | grep VITE_API

确认 API 地址指向正确的后端:

VITE_API_BASE_URL=http://localhost:3000

步骤 3: 检查后端日志

启动后端并查看日志:

cd backend
npm run dev

观察是否有以下信息:

  • 数据库连接成功
  • 服务器启动在正确的端口
  • ⚠️ 任何错误或警告信息

步骤 4: 测试 API 接口

测试用户列表 API

# 首先登录管理后台获取 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

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/.envadmin/.env.local
  2. 确认 VITE_API_BASE_URL 指向正确的后端地址
  3. 重启管理后台开发服务器
cd admin
npm run dev

问题 3: CORS 跨域问题

症状: 浏览器控制台显示 CORS 错误

原因: 后端没有正确配置 CORS

解决方案: 检查 backend/src/app.js 中的 CORS 配置:

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: 数据库表不存在

症状: 诊断脚本显示表不存在或数量不对

原因: 数据库迁移未执行

解决方案:

cd backend
npm run db:init

问题 6: 小程序使用测试数据

症状: 诊断脚本显示没有用户数据

原因: 小程序在开发模式下使用模拟的 openId

解决方案:

  1. 检查小程序登录时传递的 code
  2. 查看后端日志确认用户创建
  3. 确认 authService.js 中的逻辑正确执行

数据验证清单

使用以下 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 中添加:

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 中添加日志:

const sequelize = new Sequelize(/* ... */, {
  logging: console.log, // 启用 SQL 日志
  // ...
});

4. 监控网络请求

在管理后台的 admin/src/utils/api.js 中添加请求拦截器日志:

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 统一开发环境