常见问题
前言
遇到问题,可以尝试以下的解决方案
-
请先找出关键性的错误信息以及必要问题上下文
-
尝试使用搜索引擎、技术网站、AI 工具等搜索错误的关键词
-
若是错误为依赖包的问题,请尝试去依赖包的 Github 的 Issues 中搜索
-
尝试请教认识的朋友或技术大佬
SoybeanAdmin 缓存方面的问题
问题背景
soybean-admin 的项目配置默认是
localStorage
, 初始化时对项目的主题涉及的数据进行持久化
项目的缓存分为两方面
-
LocalStorage
-
SessionStorage
缓存要点
-
LocalStorage 默认的缓存期限为 7 天(60 _ 60 _ 24 * 7) SessinoStorage 则是当前会话保持时有效
-
保存数据的时候默认会对缓存的数据进行加密,使得数据保存无负担
-
获取数据的时候默认会对缓存的数据进行解密,使得数据使用同样无负担
-
对于本框架缓存方面的使用主要集中在下列几个方法中:
-
set:通过给方法传递必填参数
key
、
value
和可选参数
expire
对数据进行缓存
-
get:通过给方法传递必填参数
key
获取缓存的数据
-
remove:通过给方法传递必填参数
key
移除指定的缓存数据
-
clear:通过调用该方法,清除当前所有的
Storage
相关的缓存数据
-
缓存的数据类型需要预先在 src/typings/storage.d.ts 里面定义好
关于修改文件相关的问题
-
当修改
.env
等环境文件及
vite.config.ts
文件时,vite 会自动重启服务。
但是自动重启有几率出现问题,请重新运行项目即可解决。
-
当修改
.vue
或者
.ts
时, vite 进行热部署时有几率造成页面卡顿导致无法看到
实时修改的效果,
F5
刷新即可解决
前端静态路由添加菜单后没显示
📢 有热心群友反馈:刚接触项目时,先添加组件再添加静态路由,但是页面上无法渲染菜单和页面,项目不报错
问题背景
项目初始化路由时,该同学的顶级路由数据 meta 中含有 hide 属性为 true
所以菜单和页面都无法显示出来
🎯 文件位置: src\typings\route.d.ts
关键代码如下所示
解决方案
去除 hide 属性即可正常显示菜单和页面
项目中的权限路由模式如何理解,相应的渲染路由的数据格式怎么定义
问题背景
项目中的权限路由模式分为:
项目使用动态路由模式进行数据渲染时,会自动覆盖路由首页的 name 值
格式要求
组件定义示例:
路由定义示例
组件定义示例:
路由定义示例
组件定义示例:
路由定义示例:
Tab 页签刷新后一片空白
📢 有热心群友反馈,项目在开发环境中存在
Tab 页切换出现空白页的情况
这是由于开启了路由切换动画,且对应的页面组件存在多个根元素时导致的, 可以通过在页面最外层添加一个
<div></div>
( 或者) 即可
❌
错误示范
✔
正确示范
组件命名问题
📢 有热心群友反馈:为了延续项目高质量代码的风格,想学习一种相对科学的命名方式,但苦于没有具体的格式规范
命名规范
-
文件命名: 统一用小写字母命名,多个单词用中划线连接
-
构造函数、class 类、TS 类型命名:统一用 PascalCase 法命名,多个单词首字母大写
-
变量、普通函数命名:统一用 camelCase 法命名,多个单词首字母小写
-
常量命名:统一用大写字母命名,多个单词用下划线连接
-
样式的命名:统一用小写字母命名,多个单词用中划线连接
模板区别
Soybean-Admin
包含:
-
基础代码示例:表格、卡片等
-
基础插件调用:图表、地图、markdown 编辑器等
-
前端权限示例:自定义权限指令和权限函数,实现
super
、
admin
、
user
和
test
的权限分配
-
主题高度定制化:可以通过主页右侧的 ⚙️ 进行系统主题的开发,迅速搭建一套属于自己的后台管理系统
Soybean-Admin-Thin 精简了代码后的模板项目,丰富的主题配置可以让系统更加出彩,同时自由度更高,推荐在此版本上进行业务开发
环境问题
如果出现依赖安装报错,启动报错等。先检查电脑环境有没有安装齐全。
本地环境需要具备
依赖安装问题
镜像配置
项目默认镜像配置文件 .npmrc 的配置项说明
🎯 文件位置:
.npmrc
-
registry
:指定了 npm 包的镜像源,本项目中使用的镜像源是淘宝的最新镜像。
-
shamefully-hoist
:该选项用于将依赖项 hoist 到尽可能高的节点上,提高依赖项的共用
完整代码指路
SoybeanAdmin🔜
代码如何保持最新
如果你使用了该项目进行项目开发。开发之中想同步最新的代码。你可以设置多个源的方式
-
提交代码到自己的 git
-
如何同步开源最新代码
使用 Git 进行代码管理的时候,先更新,遇到冲突先解决,然后再合并
为什么是 dayjs
Day.js 是一个极简的 JavaScript 库,可以为现代浏览器解析、验证、操作和显示日期和时间。
为什么使用 Day.js?
文件大小只有 2KB 左右,下载、解析和执行的 JavaScript 更少,为代码留下更多的时间。
沙箱机制
所有更改 Day.js 对象的 API 操作都将返回一个新的实例。这有助于防止错误和避免长时间的调试会话。
国际化
Day.js 对国际化有很大的支持。但是,除非您使用它们,否则它们都不会包含在您的构建中。
跨域问题
概念
跨域(Cross-Origin)指的是在浏览器中,当前网页从一个不同的域名、端口或协议请求资源,导致安全策略限制,从而出现跨域问题。
跨域的形成原因
正向代理和反向代理
-
正向代理
正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户.
在本项目中指的是通过配置
Vite
实现正向代理
-
反向代理
正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
一般是将 Dist 目录部署到
Nginx
服务器后,通过配置
nginx.conf
实现反向代理
常见解决方案
实际的开发场景可能遇到的跨域有两种情况,
本地开发跨域
在进行本地开发时,一般比较常见的是使用下面三种方式进行处理:
-
Vite 的 Proxy 配置正向代理 (项目本地开发环境使用的此方案)
-
后台服务器开启 CORS
-
前端服务器 Nginx 配置反向代理
本地开发环境中,默认开启本地代理
生产环境跨域
项目部署至生产环境后,一般使用 Nginx 进行请求转发至后台服务器
🎯 文件位置:
\.env-config.ts
完整代码指路
SoybeanAdmin🔜
⚙ Nginx 配置参考
就可以通过
http://localhost:8080
访问到这个已部署项目的首页
项目中配置生产环境端口必须和
nginx.conf
中 listen 配置的 端口号 保持一致
如果后台服务开启 CROS, 前台服务则不需要额外配置
接口请求成功,无法获取到响应数据
📢 有热心群友反馈:项目在接口时,请求发送成功 , 可以在请求的响应体中看到数据,但是无法将数据渲染到页面中
问题背景
这里是由于作者大大在进行
Axios
封装组件类的过程中
默认将代表请求成功的响应状态码定义为常见的
200
, 并且在响应拦截器中对该状态进行判断,如果自定义的代表请求成功的状态码不是
200
,就会对该请求的数据按照响应失败的逻辑进行解构,造成获取到的 data 为
null
,
这就会造成请求成功但是不一定能获取到预期的响应参数的现象。
解决方案
可以通过修改如下代码中的
successCode
与后台服务中定义的表示业务逻辑请求成功的状态码保持一致,即可顺利请求到后台接口的数据
🎯 文件位置:
src\service\request\instance.ts
完整代码指路
SoybeanAdmin🔜
项目中使用 Iframe 嵌入本地的 HTML 时出现 404 的问题
📢 有热心群友反馈:在项目开发过程中,业务需要在项目中使用 Iframe 嵌入本地的 HTML 文件, 但是嵌入后无法显示页面内容,显示的是 404 页面
问题背景
整个项目都是单页面应用,所以从路径里去加载不同的 HTML 本身就不支持
要么创建多页面应用
要么在单页面应用里通过 iframe 去加载其它的 HTML
解决方案
集成 vite-plugin-mpa 插件,具体操作步骤如下
下面是在 Vue 项目中使用 vite-plugin-mpa 插件并通过 iframe 嵌入本地 HTML 文件的步骤:
-
创建 Vue 项目:如果你还没有创建 Vue 项目,可以使用 Vue CLI 创建一个新项目。执行以下命令:
-
安装 vite-plugin-mpa 插件:在项目根目录下执行以下命令:
-
Vite 配置文件中添加插件
这里我们配置了两个入口文件
index.html
和
about.html
,并把 HTML 文件输出到
dist/mpa
目录下。我们还开启了
setTitle
、
setMeta
、
setLink
和
setScript
这四个选项,它们会为每个页面设置对应的 title、meta、link 和 script 标签。
-
创建本地 HTML 文件:在项目根目录下创建两个本地 HTML 文件,分别命名为
index.html
和
about.html
。这里的路径要和
vite.config.js
中的输入路径一致。
-
在 Vue 中嵌入 iframe:在 Vue 组件中,可以使用 iframe 标签嵌入本地 HTML 文件。例如: