Spring Cloud + Vue前后端分离-第16章 项目功能升级

 源代码在GitHub - 629y/course: Spring Cloud + Vue前后端分离-在线课程

Spring Cloud + Vue前后端分离-第16章 项目功能升级

BUG修复与功能优化

16-1 已提交的代码讲解

1.将gateway中的路由配置改为IP,用lb://时,有时候会有延时,需要等一会儿才能访问。

2.BUG修复,文件上传改为OSS后,文件检查check方法中,应该拼上OSS地址

application.properties

后续介绍生产发布时,会将eureak换成nacos,既是注册中心,又是配置中心,解决不同环境使用不同配置。开发环境用ip+port,生产环境用lb。

UploadController.java

1.修改redis地址

如果要更换redis地址,则两个配置要同时改

1.BUG修复:注册时,验证码校验通过后,短信记录未变成【已使用】

SmsService.java

1.BUG修复,时间格式化注意分和秒的边界

filter.js

1.解决侧边栏收缩按钮不起作用的BUG

登录不起作用

login.vue

window.open是js原生方法,用于打开某个页面

admin.vue

出现问题:在打开login页面时,已经加载过所有的js和css,跳到welcome页面,又把所有的js和css再加载一遍

16-2 验证码图片清晰度优化

1.验证码图片清晰度调整

现有效果

KaptchaConfig.java

复制WaterRipple.java一份

NoWaterRipple.java

KaptchaConfig.java

测试

16-3 Vue CLI多环境编译

1.vue增加按多环境编译

2.增加配置文件vue.config.js,作用类似于springboot的application.properties,参考文档:https://cli.vuejs.org/zh/config/#vue-config-js

3.修改BASE_URL改为相对路径,对应的配置是publicPath

package.json

​​​​​​​

一些第三方的前端软件包,经常会有dist目录,这个就是编译后的结果

vue.config.js类似于springboot的application.properties,有配置就读

配置参考 | Vue CLI

编译之后,前面不会有/

没有"/",相当于当前index.html所在的路径

访问后端的这个路径,是配置在env.prod这个文件里的,说明build-prod确实是打包的生产配置。

前端发布,就是将dist目录拷到服务器上,用nginx,tomcat,nodejs等容器启动。

修改publicPath,本地开发使用/,生产环境使用./

1.修改publicPath,本地开发使用/,生产环境使用./

vue.config.js

16-4 新增视频时没有触发绑定

1.两种方法解决新增讲师上传头像不能实时预览的问题

问题:新增视频时没有触发绑定

当输入其它框内容,才会触发头像显示,就会把绑定的数据渲染到页面上来

teacher是空对象,初始没有image属性,也就不会有对应的监听操作,所以即使js代码里为image赋值,也不会渲染到页面上。

编辑时,teacher是从后端返回的,此时所有的属性都会有,即使存的是空值。

原理大概是vue会为存在的属性生成set,get方法,在set,get方法里做文章,如果初始空对象,没有任何属性,那当然不会有对应的set,get

也能解决问题

//解决不能实时预览的问题
_this.$forceUpdate();

course.vue

section.vue

16-5 关闭播放器模态框时停止播放

1.关闭播放器模态框时停止播放

问题:关闭模态框时,视频还在播放

正常功能:关闭模态框时,自动停止播放

步骤一:找到关闭模态框的事件

$('#myModal').on('hidden.bs.modal', function (e) {
  // do something...
})

第二步,找到视频播放器的暂停方法

pause 暂停视频

修改fontawesome cdn地址

1.修改fontawesome cdn地址

用CDN的好处,就是代码中不用加入各种依赖,只要引入cdn地址就可以了,并且加载的资源都不占用本地的带宽和流量。缺点就是受人牵制,CDN可能失效,所以需要找稳定,当然也有付费的CDN。

需要简单测试下,防止不同的cdn对应的fontawesome版本不一致,导致有些图标不显示

 detail.vue

modal-player.vue

player.vue

测试

组件化的好处:修改或新增某一个功能,只要修改组件就好了,所有用到该组件的页面都能生效 

16-6 登录token超时优化

为了测试,先把过期时间改为5秒钟

正确的做法:1.登录超时时,跳回登录页面

2.超时时间指的是空闲时间,如果控台一直有操作,就不应该算超时

1.登录超时时,前端axios拦截器统一处理,跳到登录页面

应该想办法统一的拦截超时请求,而不是对每个请求做超时判断

main.js

注意:除了401,其它的如500,502等错误也会进入error,所以我们这里只针对401进行处理。

在刚才加的错误处理中,最后return时,只构造了success和message,所以这里的resp.content就是null,后面再加个.list就会报错。又是这个常见的错误。

user.vue

测试

1.gateway每次登录验证成功时,刷新登录token超时时间

2.第二个问题:超时时间指的是空闲时间。只要有任何的操作,就应该刷新token超时时间。

LoginAdminGatewayFilter.java

测试

提交的时候把时间改过来

LoginAdminGatewayFilter.java

UserController.java 

可以把一些常量值做成配置项,放到application.properties 

16-7 Vue事件总线使用案例

1.增加事件总线,用于毫无关系的组件之间触发事件,代码不好跟踪,尽量少用

2.前端调试可以要打断点的地方增一行:debugger,浏览器打按F12进入调试状态才会生效

实现功能:点击播放小节视频时,如果需要登录,则直接弹出登录窗口

如果实现两个毫无关系的组件之间的方法调用?使用事件总线。

功能实现第一步:定义一个全局的事件总线

web/src/main.js

事件总线的使用分为两步:

1.发送事件

2.监听事件

事件总线是全局的,所有组件都可以往总线里发送一个事件,所有的组件都可以监听里面的事件。就像一根通往千家万户的电线一样。

功能实现第2步:播放方法里,发送一个打开登录窗口的事件

the-header.vue

detail.vue

使用$emit触发一个事件,事件名称可以自定义

功能实现第3步:在登录组件中增加监听打开登录窗口的事件

打开登录窗口事件随时都可能有,login组件不知道事件何时来,所以应该初始化的事件就开始监听

login.vue

使用$on监听事件,监听的事件名称要和$emit的事件名称一致。

前端调试小技巧:在要调试(打断点)的地方,加一行代码:

debugger;

注意:浏览器需要打开开发者工具(按F12)才能生效。

扩展:事件总线如何传递参数?

detail.vue

login.vue

如果要传递多个参数:可以将多个参数变成json对象进行传递

事件总线就是一个空的Vue组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/368938.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt5小项目】接金币小游戏

代码量在250行左右, 需要源码的可以私信我。

ElementUI Data:Table 表格

ElementUI安装与使用指南 Table 表格 点击下载learnelementuispringboot项目源码 效果图 el-table.vue&#xff08;Table表格&#xff09;页面效果图 项目里el-table.vue代码 <script> export default {name: el_table,data() {return {tableData: [{dat…

[office] 在Excel2010中设定某些单元格数据不参与排序的方法介绍 #其他#知识分享#笔记

在Excel2010中设定某些单元格数据不参与排序的方法介绍 在Excel中排序&#xff0c;相信大家都会了&#xff0c;直接将一组数据按照从小到大或者从大到小进行排序&#xff0c;但是&#xff0c;现在要求我们规定其中几组数据不进行排序&#xff0c;只排序其余的部分。又该如何操作…

【数据分享】1929-2023年全球站点的逐月降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐月平均气温数据、逐月最高气温数据…

Linux 网络编程 + 笔记

协议&#xff1a;一组规则 分层模型结构&#xff1a; OSI七层模型&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP 4层模型&#xff1a;链路层/网络接口层、网络层、传输层、应用层 应用层&#xff1a;http、ftp、nfs、ssh、telnet、传输层&am…

GPT3.5\GPT4系列计算完整prompt token数的官方方法

前言: ChatGPT如何计算token数&#xff1f;https://wtl4it.blog.csdn.net/article/details/135116493?spm1001.2014.3001.5502https://wtl4it.blog.csdn.net/article/details/135116493?spm1001.2014.3001.5502 GPT3.5\GPT4系列计算完整prompt token数的官方方法&#xff1…

Unity3d C# 在WebGL平台加载并解析xml文件实现总结

前言 xml是可扩展标记语言&#xff0c;由一系列的元素、属性、值节点等构成的一个树形结构&#xff0c;除了可读性差一点&#xff0c;别的用于存储一些结构化的数据还是比较方便的。这个功能在Unity3d端的实现是比较方便快捷的&#xff1a; void GetXML1() {string filePath …

K8S之Pod的介绍和使用

Pod的理论和实操 pod理论说明Pod介绍Pod运行与管理Pod管理多个容器Pod网络Pod存储 Pod工作方式自主式Pod控制器管理的Pod&#xff08;常用&#xff09; 创建pod的流程 pod实操通过资源清单文件创建自主式pod通过kubectl run创建Pod&#xff08;不常用&#xff09; pod理论说明 …

Unity根据落点和抛物线运行时间,求初始力

抛物线运行时长为2秒&#xff1a; 抛物线运行时长为4秒&#xff1a; 原理就是&#xff1a; 在竖直方向只受重力&#xff0c;做匀加速直线运动&#xff0c;水平不受力&#xff0c;做匀速直线运动。 代码&#xff1a; public void Update(){if (Input.GetKeyDown(KeyCode.Space)…

2024.1.30报错记录

今天想调通一套github上的U-net代码&#xff0c;把报错记录一下 第一章 ModuleNotFoundError: No module named skimage 没有这个模块 pip install scikit-image 第二章 TypeError: (‘Keyword argument not understood:‘, ‘input‘) TypeError: (‘Keyword argument …

数据图表方案,企业视频生产数据可视化

在信息爆炸的时代&#xff0c;如何将复杂的数据转化为直观、生动的视觉信息&#xff0c;是企业在数字化转型中面临的挑战。美摄科技凭借其独特的数据图表方案&#xff0c;为企业在数据可视化领域打开了一扇全新的大门。 一、数据图表方案的优势 1、高效便捷&#xff1a;利用数…

文件上传的另类应用

1.Imagemagick CVE-2016-3714 CVE-2022-44268 CVE-2020-29599可在vulhub靶场进行复现1.1.Imagemagick简介 ImageMagic是一款图片处理工具&#xff0c;当传入一个恶意图片时&#xff0c;就有可能存在命令注入漏洞。 ImageMagick默认支持一种图片格式mvg&#xff0c;而mvg与svg…

yii2 mongodb 操作

->where([<>,review,""]) 不等于空 $where [newstypeid>[$in>$categoryIdArr]]; 类似mysql in操作 &#xff08;$categoryIdArr是数组&#xff09; ->where([label>[$regex >赞美诗]]) 模糊搜索操作 $where [status>1,name>[$rege…

sentinel的Context创建流程分析

sentinel入门 功能 限流&#xff1a;通过限制请求速率、并发数或者用户数量来控制系统的流量&#xff0c;防止系统因为流量过大而崩溃或无响应的情况发生。 熔断&#xff1a;在系统出现故障或异常时将故障节点从系统中断开&#xff0c;从而保证系统的可用性。 降级&#xf…

Redis 的持久化机制是什么?各自的优缺点?

Redis 提供两种持久化机制 RDB&#xff08;默认&#xff09; 和 AOF 机制: RDB&#xff1a;是Redis DataBase缩写快照 RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中&#xff0c;对应产生的数据文件为dump.rdb。通过配置文件中的save参数来…

记录在树莓派中部署PI-Assistant开源项目(GPT语音对话)的BUG

核心 在部署PI-Assistant&#xff08;https://github.com/Lucky-183/PI-Assistant&#xff09;项目中&#xff0c;首先要进行环境安装&#xff0c;官网文档中提供的安装命令如下&#xff1a; pip install requests arcade RPi.GPIO pydub numpy wave sounddevice pymysql cn2…

20.HarmonyOS App(JAVA)表格布局Layout使用方法

ability_main.xml&#xff0c;实现计算器键盘按钮 <?xml version"1.0" encoding"utf-8"?> <TableLayoutxmlns:ohos"http://schemas.huawei.com/res/ohos"ohos:height"match_parent"ohos:width"match_parent"oho…

深度学习手写字符识别:训练模型

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客&#xff0c;网上也有很多教程&#xff0c;很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…

【数据分析】Excel中的常用函数公式总结

目录 0 引用方式0.1 相对引用0.2 绝对引用0.3 混合引用0.4 3D引用0.5 命名引用 1 基础函数1.1 加法、减法、乘法和除法1.2 平均数1.3 求和1.4 最大值和最小值 2 文本函数2.1 合并单元格内容2.2 查找2.3 替换 3 逻辑函数3.1 IF函数3.2 AND和OR函数3.3 IFERROR函数 4 统计函数4.1…

java设计模式:策略模式

在平常的开发工作中&#xff0c;经常会用到不同的设计模式&#xff0c;合理的使用设计模式&#xff0c;可以提高开发效率&#xff0c;提高代码质量&#xff0c;提高代码的可拓展性和维护性。今天来聊聊策略模式。 策略模式是一种行为型设计模式&#xff0c;运行时可以根据需求动…