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 相关文章推荐
5分钟理解JavaScript中this用法分享
Nov 09 Javascript
JS+CSS实现滑动切换tab菜单效果
Aug 25 Javascript
WEB开发之注册页面验证码倒计时代码的实现
Dec 15 Javascript
原生js实现日期计算器功能
Feb 17 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 Javascript
解决vue 更改计算属性后select选中值不更改的问题
Mar 02 Javascript
Vue 按键修饰符处理事件的方法
May 04 Javascript
老生常谈JS中的继承及实现代码
Jul 06 Javascript
vue router 源码概览案例分析
Oct 09 Javascript
JS+CSS实现随机点名(实例代码)
Nov 04 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 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
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
PHP里的中文变量说明
2011/07/23 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
js document.write()使用介绍
2014/02/21 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
总经理助理的八要求
2013/11/12 职场文书
科研课题实施方案
2014/03/18 职场文书
2014年校长工作总结
2014/12/11 职场文书
老龙头导游词
2015/02/11 职场文书
正规欠条模板
2015/07/03 职场文书
给学校的建议书400字
2015/09/14 职场文书
七年级数学教学反思
2016/02/17 职场文书
Python实现批量自动整理文件
2022/03/16 Python
Python OpenCV实现图像模板匹配详解
2022/04/07 Python