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 相关文章推荐
各种常用浏览器getBoundingClientRect的解析
May 21 Javascript
JS获取当前网址、主机地址项目根路径
Nov 19 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
Jun 12 Javascript
JavaScript微信定位功能实现方法
Nov 29 Javascript
微信小程序网络请求的封装与填坑之路
Apr 01 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
Oct 09 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
Nov 20 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
Sep 13 Javascript
Vue页面跳转动画效果的实现方法
Sep 23 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
详解vue中的父子传值双向绑定及数据更新问题
Jun 13 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
Aug 14 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 session劫持和防范的方法
2013/11/12 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
函授毕业自我鉴定
2013/12/19 职场文书
四好少年事迹材料
2014/01/12 职场文书
文明教师事迹材料
2014/01/16 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
完美的中文自荐信
2014/05/24 职场文书
社区戒毒工作方案
2014/06/04 职场文书
物业消防安全责任书
2014/07/23 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
HTML+JS实现在线朗读器
2022/02/15 Javascript
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers