Vue实现远程获取路由与页面刷新导致404错误的解决


Posted in Javascript onJanuary 31, 2019

一、背景

先简单介绍一下现在项目情况:前后端分离,后端服务是Java写的,前端是Vue+ElementUI。

最近的一个需求是:通过后端Api去获取前端路由表,原因是每个登录角色对应的前端路由表可能是不一样的(权限问题)

二、遇到的问题

因为前端Vue+ElementUI项目是单页应用——即只有一个index.html页面,如果路由从远程获取的话,每次F5或点击刷新按钮刷新页面的时候,就会找不到对应的路径而报404错误

三、解决方案

1、通过api远程获取路由,然后在前端生成对应路由

/* 
 将 服务器获得的[路由json字符串]转换成可访问的[前端路由组件] 
 @remoteRouterMap 服务器获得的[路由json字符串]
*/
function transformJsonToRouter(remoteRouterMap) {
 const accessedRouters = remoteRouterMap.filter(route => {
  if (!route.component) {
   route.component = Layout
  }else {
   route.component = route.component.replace("@/views/","")
   route.component = _import(route.component)
  }
  if (route.children && route.children.length) {
   route.children = transformJsonToRouter(route.children)
  }
  return true
 })

 return accessedRouters
}

2、将路由模式改成history模式(vue默认是hash模式)

export default new Router({
 mode: 'history', //后端支持可开
 scrollBehavior: () => ({ y: 0 }),
 routes: constantRouterMap,
 linkActiveClass: 'is-active'
})

3、在nginx中设置将404错误指向index文件

location / {
 try_files $uri $uri/ /index.html;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript实现的分页函数
Dec 22 Javascript
jQuery ready函数滥用分析
Feb 16 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
May 06 Javascript
js中更短的 Array 类型转换
Oct 30 Javascript
JavaScript中__proto__与prototype的关系深入理解
Dec 04 Javascript
javascript实现checkbox复选框实例代码
Jan 10 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
Jan 26 Javascript
JS构造函数与原型prototype的区别介绍
Jul 04 Javascript
Vue引入jquery实现平滑滚动到指定位置
May 09 jQuery
详解JavaScript 中 if / if...else...替换方式
Jul 15 Javascript
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
vue中的mvvm模式讲解
Jan 31 #Javascript
Vue和React组件之间的传值方式详解
Jan 31 #Javascript
使用Angular Cli如何创建Angular私有库详解
Jan 30 #Javascript
async/await优雅的错误处理方法总结
Jan 30 #Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
Jan 30 #Javascript
JavaScript之解构赋值的理解
Jan 30 #Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 #Javascript
You might like
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
php基本函数汇总
2015/07/09 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
简单了解python元组tuple相关原理
2019/12/02 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
个人总结与自我评价
2015/02/14 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python