5.6 KiB
5.6 KiB
游客模式教师列表完整修复方案
问题诊断
从控制台截图可以看到:
- ✅
/api/teacher/list返回 200 成功 - ❌
/api/teacher/filter-options返回 401 未登录 - ⚠️ 教师列表页面显示的是默认数据(孙全能、周博学等)
根本原因
原因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:清除微信开发者工具缓存
- 打开微信开发者工具
- 点击菜单:工具 → 清除缓存 → 全部清除
- 重新编译小程序
步骤8:验证修复
- 以游客身份访问教师列表页面
- 检查控制台:
- ✅
/api/teacher/list应该返回 200 - ✅
/api/teacher/filter-options应该返回 200(不再是401)
- ✅
- 点击"科目"、"区域"、"年级"筛选按钮
- 确认筛选选项是从后端获取的真实数据(不是默认选项)
预期结果
修复后应该看到:
- ✅ 控制台不再有401错误
- ✅ 教师列表显示真实的教师数据
- ✅ 筛选选项显示真实的科目、区域、年级数据
- ✅ 游客可以正常浏览和筛选教师
技术细节
后端配置(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- 教师列表页面