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 IE 与 FF中兼容问题小结
Feb 18 Javascript
JavaScript 页面编码与浏览器类型判断代码
Jun 03 Javascript
IE的事件传递-event.cancelBubble示例介绍
Jan 12 Javascript
前端必备神器 Snap.svg 弹动效果
Nov 10 Javascript
js简单实现Select互换数据的方法
Aug 17 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
Dec 20 Javascript
JS实现微信弹出搜索框 多条件查询功能
Dec 13 Javascript
jQuery简易时光轴实现方法示例
Mar 13 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
Nov 30 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
Aug 23 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 Javascript
如何在JS文件中获取Vue组件
Sep 16 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
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
Python中关于字符串对象的一些基础知识
2015/04/08 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
SQL中where和having的区别
2012/06/17 面试题
市场营销专科应届生求职信
2013/11/24 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
技能比武方案
2014/05/21 职场文书
学校党支部承诺书
2015/04/30 职场文书
领导干部失职检讨书
2015/05/05 职场文书
社区干部培训心得体会
2016/01/06 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
Pytorch 实现变量类型转换
2021/05/17 Python