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 相关文章推荐
jQuery1.4.2与老版本json格式兼容的解决方法
Feb 12 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
May 10 Javascript
Javascript 中 null、NaN和undefined的区别总结
Apr 10 Javascript
2014年50个程序员最适用的免费JQuery插件
Dec 15 Javascript
简单谈谈JavaScript的同步与异步
Dec 31 Javascript
利用JQuery写一个简单的异步分页插件
Mar 07 Javascript
JavaScript中removeChild 方法开发示例代码
Aug 15 Javascript
Three.js开发实现3D地图的实践过程总结
Nov 20 Javascript
vue 设置proxyTable参数进行代理跨域
Apr 09 Javascript
JS 数组随机洗牌的实例代码
Sep 12 Javascript
实例讲解React 组件生命周期
Jul 08 Javascript
解决vue一个页面中复用同一个echarts组件的问题
Jul 19 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
APMServ使用说明
2006/10/23 PHP
E路文章系统PHP
2006/12/11 PHP
PHP生成月历代码
2007/06/14 PHP
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
PHP5.3新特性小结
2016/02/14 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
js的with语句使用方法
2007/09/21 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
jQuery实现的form转json经典示例
2017/10/10 jQuery
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
志愿者活动总结报告
2014/06/27 职场文书
员工培训协议书
2014/09/15 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
导游词之无锡唐城
2019/12/12 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
Nginx实现会话保持的两种方式
2022/03/18 Servers