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 相关文章推荐
jQuery+jsp实现省市县三级联动效果(附源码)
Dec 03 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
Mar 16 Javascript
返回函数的JavaScript函数
Jun 14 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
Oct 09 Javascript
jQuery Validate插件自定义验证规则的方法
Dec 27 Javascript
Extjs让combobox写起来简洁又漂亮
Jan 05 Javascript
实现一个简单的vue无限加载指令方法
Jan 10 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
Jan 21 Javascript
JavaScript实现实时更新系统时间的实例代码
Apr 04 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
Aug 02 Javascript
微信小程序自定义单项选择器样式
Jul 25 Javascript
js实现录音上传功能
Nov 22 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设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
Jquery选择子控件"大于号"和" "区别介绍及使用示例
2013/06/25 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
解决python 文本过滤和清理问题
2019/08/28 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
行政人员岗位职责
2013/12/08 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
企业委托书范本
2014/09/13 职场文书
个人投资合作协议书
2014/10/12 职场文书
大学生个人学年总结
2015/02/15 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏