peixue-dev/Archive/[一次性]游客模式教师列表完整修复-2026-02-01.md

5.6 KiB
Raw Blame History

游客模式教师列表完整修复方案

问题诊断

从控制台截图可以看到:

  1. /api/teacher/list 返回 200 成功
  2. /api/teacher/filter-options 返回 401 未登录
  3. ⚠️ 教师列表页面显示的是默认数据(孙全能、周博学等)

根本原因

原因1后端配置未生效

虽然已经在 WebMvcConfig.java 中添加了 /api/teacher/filter-options 的排除配置,但后端没有重新编译,旧的配置仍在运行。

原因2数据库可能没有教师数据

即使接口返回成功,如果数据库中没有教师数据,getFilterOptions() 也会返回空的筛选选项。

完整修复步骤

步骤1检查数据库中是否有教师数据

运行SQL检查

-- 查看教师总数
SELECT COUNT(*) as teacher_count FROM teacher;

-- 查看已审核的教师数量status=1
SELECT COUNT(*) as approved_teacher_count 
FROM teacher 
WHERE status = 1;

-- 查看教师列表前10条
SELECT 
    id,
    name,
    real_name,
    teacher_name,
    phone,
    status,
    subjects,
    service_area,
    grades,
    create_time
FROM teacher
WHERE status = 1
ORDER BY create_time DESC
LIMIT 10;

如果没有数据需要先创建测试教师数据见步骤5

步骤2停止后端服务

在运行后端的终端按 Ctrl+C 停止服务。

步骤3重新编译后端

cd peidu/backend
mvn clean package -DskipTests

步骤4启动后端服务

java -jar target/peidu-backend-1.0.0.jar

或者使用IDE启动。

步骤5创建测试教师数据如果数据库为空

-- 插入测试教师数据
INSERT INTO teacher (
    name, 
    real_name, 
    teacher_name,
    phone, 
    status, 
    subjects, 
    service_area, 
    grades,
    introduction,
    teaching_years,
    hourly_rate,
    user_id,
    create_time,
    update_time
) VALUES 
(
    '孙全能', 
    '孙全能', 
    '孙全能',
    '13800138001', 
    1, 
    '语文,数学,英语', 
    '朝阳区', 
    '1-3年级,4-6年级',
    '全科辅导专家8年教学经验擅长综合提升学生成绩',
    8,
    160,
    -1001,
    NOW(),
    NOW()
),
(
    '周博学', 
    '周博学', 
    '周博学',
    '13800138002', 
    1, 
    '数学,物理', 
    '海淀区', 
    '初中,高中',
    '理科专家12年教学经验擅长数理化综合辅导',
    12,
    170,
    -1002,
    NOW(),
    NOW()
),
(
    '吴艺术', 
    '吴艺术', 
    '吴艺术',
    '13800138003', 
    1, 
    '美术,音乐', 
    '西城区', 
    '1-3年级,4-6年级,初中',
    '艺术专业6年教学经验培养学生艺术素养',
    6,
    180,
    -1003,
    NOW(),
    NOW()
),
(
    '郑音乐', 
    '郑音乐', 
    '郑音乐',
    '13800138004', 
    1, 
    '音乐,钢琴', 
    '东城区', 
    '1-3年级,4-6年级',
    '音乐教育专业10年教学经验多名学生考级通过',
    10,
    190,
    -1004,
    NOW(),
    NOW()
);

步骤6清除前端缓存并重新编译

cd peidu/uniapp
rmdir /s /q unpackage\dist
rmdir /s /q node_modules\.cache
npm run build:mp-weixin

步骤7清除微信开发者工具缓存

  1. 打开微信开发者工具
  2. 点击菜单:工具 → 清除缓存 → 全部清除
  3. 重新编译小程序

步骤8验证修复

  1. 以游客身份访问教师列表页面
  2. 检查控制台:
    • /api/teacher/list 应该返回 200
    • /api/teacher/filter-options 应该返回 200不再是401
  3. 点击"科目"、"区域"、"年级"筛选按钮
  4. 确认筛选选项是从后端获取的真实数据(不是默认选项)

预期结果

修复后应该看到:

  1. 控制台不再有401错误
  2. 教师列表显示真实的教师数据
  3. 筛选选项显示真实的科目、区域、年级数据
  4. 游客可以正常浏览和筛选教师

技术细节

后端配置WebMvcConfig.java

registry.addInterceptor(jwtInterceptor)
    .addPathPatterns("/api/**")
    .excludePathPatterns(
        "/api/teacher/list",           // ✅ 教师列表
        "/api/teacher/detail/**",      // ✅ 教师详情
        "/api/teacher/filter-options", // ✅ 筛选选项
        // ... 其他路径
    );

前端配置request.js

const GUEST_ALLOWED_URLS = [
  '/api/teacher/list',           // ✅ 教师列表
  '/api/teacher/filter-options', // ✅ 筛选选项
  // ... 其他路径
]

数据库表结构

teacher 表关键字段:
- status: 1=已认证,0=未认证
- subjects: 科目(逗号分隔)
- service_area: 服务区域
- grades: 年级(逗号分隔)

常见问题

Q1: 为什么 /api/teacher/list 返回200/api/teacher/filter-options 返回401

A: 因为后端没有重新编译,WebMvcConfig.java 的修改没有生效。

Q2: 为什么教师列表显示的是默认数据?

A: 因为 /api/teacher/filter-options 返回401失败前端使用了 setDefaultFilterOptions() 中的默认数据。

Q3: 如何确认后端配置已生效?

A: 重新编译后端,查看控制台日志,应该看到 /api/teacher/filter-options 不再经过JWT拦截器。

相关文件

  • peidu/backend/src/main/java/com/peidu/config/WebMvcConfig.java - 后端拦截器配置
  • peidu/backend/src/main/java/com/peidu/controller/TeacherController.java - 教师控制器
  • peidu/backend/src/main/java/com/peidu/service/impl/TeacherServiceImpl.java - 教师服务实现
  • peidu/uniapp/src/utils/request.js - 前端请求配置
  • peidu/uniapp/src/pages/teacher/list.vue - 教师列表页面