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结合ajax读取txt文件内容
Dec 05 Javascript
js实现的光标位置工具函数示例
Oct 03 Javascript
jQuery中animate的几种用法与注意事项
Dec 12 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
Mar 22 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
JavaScript笛卡尔积超简单实现算法示例
Jul 30 Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
Feb 21 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
Oct 26 Javascript
从0搭建vue-cli4脚手架
Jun 17 Javascript
JSON获取属性值方法代码实例
Jun 30 Javascript
详解 TypeScript 枚举类型
Nov 02 Javascript
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 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
python 获取文件列表(或是目录例表)
2009/03/25 Python
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
让python在hadoop上跑起来
2016/01/27 Python
Python常用算法学习基础教程
2017/04/13 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
python线程池如何使用
2020/05/28 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
中西医结合临床医学专业大学生自荐信
2013/09/28 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
个人委托书范本
2014/04/02 职场文书
2014年度党员自我评议
2014/09/13 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
教师个人师德总结
2015/02/06 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
MySQL 如何分析查询性能
2021/05/12 MySQL