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 相关文章推荐
js变量作用域及可访问性的探讨
Nov 23 Javascript
JavaScript中Math对象使用说明
Jan 16 Javascript
详解new function(){}和function(){}() 区别分析
Mar 22 Javascript
javascript 页面只自动刷新一次
Jul 10 Javascript
ajax请求乱码的解决方法(中文乱码)
Apr 10 Javascript
如何使用jquery修改css中带有!important的样式属性
Apr 28 Javascript
利用jsonp与代理服务器方案解决跨域问题
Sep 14 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
Jun 16 Javascript
javascript canvas实现简易时钟例子
Sep 05 Javascript
vue实现动态表格提交参数动态生成控件的操作
Nov 09 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
程序员编程十条戒律
2009/07/09 PHP
IP138 IP地址查询小偷实现代码
2010/02/15 PHP
YII实现分页的方法
2014/07/09 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
实例详解vue中的$root和$parent
2019/04/29 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
python根据url地址下载小文件的实例
2018/12/18 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
python如何删除文件中重复的字段
2019/07/16 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
Python Merge函数原理及用法解析
2020/09/16 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
阿里旅行:飞猪
2017/01/05 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
小学教师办公室制度
2014/02/03 职场文书
运动会演讲稿
2014/05/07 职场文书
校园广播稿精选
2014/10/01 职场文书
经营目标责任书
2015/05/08 职场文书
解除处分决定书
2015/06/25 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
MySql数据库 查询时间序列间隔
2022/05/11 MySQL
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android