# online-education **Repository Path**: baucd/online-education ## Basic Information - **Project Name**: online-education - **Description**: 基于Vue+SpringBoot的在线教育平台 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 0 - **Created**: 2022-06-07 - **Last Updated**: 2024-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 一、项目描述 - 在线教育系统,系统分为前台用户系统和后台管理系统两部分。B2C模式。 - 前台用户系统包括:首页、课程、名师、问答、文章。 - 后台管理系统包括:讲师管理、课程分类管理、课程管理、统计分析、Banner管理、订单管理、权限管理等功能。 ​ 后端的主要技术架构是:SpringBoot + SpringCloud + MyBatis-Plus + HttpClient + MySQL + Maven+EasyExcel+ nginx ​ 前端的架构是:Node.js + Vue.js +element-ui+NUXT+ECharts ​ 其他涉及到的中间件包括Redis、阿里云OSS、阿里云视频点播 ​ 业务中使用了ECharts做图表展示,使用EasyExcel完成分类批量添加、注册分布式单点登录使用了JWT 项目前后端分离开发,后端采用SpringCloud微服务架构,持久层用的是MyBatis-Plus,使用Swagger生成接口文档,接入了阿里云视频点播、阿里云OSS。 ## 二、系统中的角色 ​ 前台:会员(学员)、游客 ​ 后台:系统管理员、运营人员 ## 三、后台管理系统功能描述 ### 1、权限管理模块 - 菜单管理:CRUD - 角色管理:CRUD、批量删除、为角色分配菜单 - 用户管理:CRUD、为用户分配角色 - 表和表的关系:使用五张表【用户表、角色表、菜单表、用户角色中间表、角色菜单中间表】 ### 2、**讲师管理模块** - 多条件分页查询、CRUD ### **3、课程分类模块** - 添加课程分类 ​ 读取Excel里的课程数据,添加到数据库中,通过[easyExcel](https://so.csdn.net/so/search?q=easyExcel&spm=1001.2101.3001.7020) - 课程分类列表 ​ 使用[树形结构](https://so.csdn.net/so/search?q=树形结构&spm=1001.2101.3001.7020)显示课程分类列表 ### **4、课程管理模块** - 课程列表功能 - 添加课程 - 添加小节时,可以上传课程视频 - 课程发布的流程:填写课程基本信息、添加课程大纲(章节和小节)、课程信息确认、最终发布 课程如何判断是否已经发布? ``` 通过给数据库设置字段status来判断他现在的状态 ``` 课程添加过程中,中途把课程停止添加,重新去添加新的课程,如何找到之前没有发布完成的课程,继续发布呢? ``` 到课程列表中选择未发布的课程状态,来查询,里面会有编辑看课程信息,然后去继续编辑发 布完成 ``` ## 四、视频点播实现 ​ 直接接入了阿里云的云视频点播。云平台上的功能包括视频上传、转码、加密、智能审核、监控统计等。 ​ 还包括视频播放功能,阿里云还提供了一个视频播放器。 ## 五、前后端联调注意点 1、请求方式post、get 2、json、x-wwww-form-urlencoded混乱的错误 3、后台必要的参数,前端省略了 4、数据类型不匹配 5、空指针异常 6、分布式系统中分布式id生成器生成的id 长度过大(19个字符长度的整数),js无法解析(js智能解析16个长度:2的53次幂) ​ id策略改成 ID_WORKER_STR ## 六、需要注意的问题 ### 6.1、主键问题 - 分布式id生成器在前端无法处理,总是在后三位进行四舍五入。 - 分布式id生成器生成的id是19个字符的长度,前端javascript脚本对整数的处理能力只有2的53次方,也就是最多只能处理16个字符 ``` - 解决的方案是把id在程序中设置成了字符串的性质 ``` ### 6.2、cookie问题 项目迁移到Spring-Cloud的时候,经过网关时,前端传递的cookie后端一只获取不了,看了cloud中zuul的源码,发现向下游传递数据的时候,zull默认过滤了敏感信息,将cookie过滤掉了 ``` - 解决的方案是在配置文件中将请求头的过滤清除掉,使cookie可以向下游传递 ``` ### 6.3、分布式系统的id生成策略 ​ https://www.cnblogs.com/haoxinyue/p/5208136.html ### 6.4、**前端渲染和后端渲染的区别** ​ 前端渲染是返回json给前端,通过javascript将数据绑定到页面上 ​ 后端渲染是在服务器端将页面生成直接发送给服务器,有利于SEO的优化 ### 6.5、跨域问题 - 访问协议+ip地址+端口号,三者有任何一个不一样,就会产生跨域问题 - 解决方案: - 在controller添加注解@CrossOrigin - 通过Gateway网关解决,写一个配置类 - 上面只能使用一个,不然会失效 ### 6.6、413问题 - 上传视频时,nginx有上传视频大小限制,如果超过,就会出现413错误 - 413描述:请求体过大 ``` - 解决方案:在Nginx里配置客户端提交文件大小 ``` - 响应状态码:413、跨域403、重定向302 ### 6.7、Maven加载问题 - Maven加载项目时,不会加载src-java文件夹里面的xml类型文件 ``` 解决方案: - 1、复制xml文件到target目录 - 2、在maven中配置,与properties配置文件中指定xml文件夹 ```