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与asp.net(c#)互相调用方法
Dec 13 Javascript
javascript 事件查询综合 推荐收藏
Mar 10 Javascript
js控制iframe的高度/宽度让其自适应内容
Apr 09 Javascript
js和jquery设置disabled属性为true使按钮失效
Aug 07 Javascript
理解js对象继承的N种模式
Jan 25 Javascript
JavaScript简单下拉菜单特效
Sep 13 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
Nov 09 Javascript
Angularjs2不同组件间的通信实例代码
May 06 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
Sep 12 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
angularJs select绑定的model取不到值的解决方法
Oct 08 Javascript
JavaScript实现左右滚动电影画布
Feb 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 遍历XP文件夹下所有文件
2008/11/27 PHP
php生成图片验证码
2015/06/09 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
node.js超时timeout详解
2014/11/26 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
python生成日历实例解析
2014/08/21 Python
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python中获取网页状态码的两个方法
2014/11/03 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
python实现文本界面网络聊天室
2018/12/12 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
pytorch forward两个参数实例
2020/01/17 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
培训专员岗位职责
2014/02/26 职场文书
报告会主持词
2014/04/02 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
中学推普周活动总结
2015/05/07 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python
Nginx配置https的实现
2021/11/27 Servers
R9700摩机记
2022/04/05 无线电
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL