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 URL编码和解码使用说明
Apr 12 Javascript
Javascript base64编码实现代码
Dec 02 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
javascript实现获取cookie过期时间的变通方法
Aug 14 Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 Javascript
Jquery中find与each方法用法实例
Feb 04 Javascript
详解iframe与frame的区别
Jan 13 Javascript
Js与Jq获取浏览器和对象值的方法
Mar 18 Javascript
利用JQuery实现datatables插件的增加和删除行功能
Jan 06 Javascript
微信小程序组件 marquee实例详解
Jun 23 Javascript
Javascript幻灯片播放功能实现过程解析
May 07 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 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中的字符串函数
2006/10/09 PHP
PHP学习之PHP表达式
2006/10/09 PHP
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
鼠标图片振动代码
2006/07/06 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python深入学习之闭包
2014/08/31 Python
详解Python中的各种函数的使用
2015/05/24 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
趣味运动会活动方案
2014/02/12 职场文书
教师自我鉴定范文
2014/03/20 职场文书
质量承诺书格式
2014/05/20 职场文书
天坛导游词
2015/02/02 职场文书
学历证明范文
2015/06/16 职场文书
网吧管理制度范本
2015/08/05 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python