vue 项目中当访问路由不存在的时候默认访问404页面操作

作者:front-gl 时间:2024-04-30 10:41:49 

前言:

在Vue项目中,当访问的页面路由不存在或错误时,页面显示为一片空白。然而,通常我们需要对访问url不存在或者错误的情况下添加默认的404页面,即not found页面。

一般的处理方法是:

在最后添加一个path: * ,优先级从上到下查找路由,都没有的时候全部指向 404页面 ,代码如下:


const baseRoute = [
{ path: '/login', name: 'login', component: Login },
{path: '/', redirect: '/index', component: Layout, name: 'dashboard'},
// 404page
{ path: '/404', name: 'page404', component: page404 },
{
path: '/',
redirect: '/index',
component: Layout,
children: [
{
path: 'index',
name: 'index',
component: ModeIndex,
meta: {
 title: '', // 设备建模
 icon: ''
}
},
{
path: 'project',
name: 'project',
component: Project,
meta: {
 dynamic: true, // 动态面包屑标题
 title: ''
}
}
]
}
{
path: '*', // 页面不存在的情况下会跳到404页面
redirect: '/404',
name: 'notFound',
hidden: true
}
]
const router = new Router({
routes: baseRoute
})

问题:

这样做好处是简单,方便,但是因为我代码里面添加了如下代码,用于页面token失效跳出登录的时候记住当前路由,当下次再登录的时候直接跳到指定路由


if (to.path.slice(1) !== '') {
 router.push({
 path: '/login',
 query: {
 redirect: to.path.slice(1)
 }
 })
} else {
router.push({
 path: '/login'
})
}

就是因为加了所有找不到都指向404,导致了第一次不知道网址的人输错后,redirect就指向了404,这样用户第一次登录成功后页面就进入404,体验很差,产品和测试也一直以为是页面出bug了,为了解决这个问题,查找了相关资料,下面是优化后的方法。

优化后的设置方式:

1、route --> index.js

末尾去掉 * --> 404


const baseRoute = [
{ path: '/login', name: 'login', component: Login },
{path: '/', redirect: '/index', component: Layout, name: 'dashboard'},
// 404page
{path: '/404', component: page404, name: 'page404'},
{
path: '/',
redirect: '/index',
component: Layout,
children: [
{
path: 'index',
name: 'index',
component: ModeIndex,
meta: {
 title: '', // 设备建模
 icon: ''
}
},
{
path: 'project',
name: 'project',
component: Project,
meta: {
 dynamic: true, // 动态面包屑标题
 title: ''
}
}
]
},
// {
// path: '*', // 页面不存在的情况下会跳到404页面
//redirect: '/404',
//name: 'notFound',
//hidden: true
//}
]
const router = new Router({
routes: baseRoute
})

2、在router.beforeEach 里面使用 to.matched 匹配出的路由个数来作为判断条件,匹配不到路由就跳转到404页面,代码如下

pemmision.js

代码如下:


import router from './router'
import { getCookie } from './utils/auth'

// 通过beforeEach钩子来判断用户是否登陆过 有无token
const whiteList = ['/login'] // 不重定向白名单
// const userInfo = getUserInfo()

router.beforeEach((to, from, next) => {
console.log(to.matched)
// 判断是否有登录过
if (getCookie('userId_dev')) {
// 如果包含userId_dev 从登录页面跳转 直接跳转到首页 /
if (to.path === '/login') {
next()
} else {
if (to.matched.length === 0) {
next('/404') // 判断此跳转路由的来源路由是否存在,存在的情况跳转到来源路由,否则跳转到404页面
}
next() // 如果匹配到正确跳转
}
// 没有登录
} else {
if (whiteList.indexOf(to.path) !== -1) {
next()
} else {
// 还没有登录过 则跳转到登录界面
// next('/login')
if (to.path.slice(1) !== '') {
if (to.matched.length === 0) {
 router.push({
 path: '/login'
 })
} else {
 router.push({
 path: '/login',
 query: {
 redirect: to.path.slice(1)
 }
 })
}
} else {
router.push({
 path: '/login'
})
}
}
}
})

这样就解决了一开始输错就跳到404的尴尬了!

补充知识:Vue中用户输入无效地址,跳转到错误提示页面

1. 在动态路由中,有的路径是无效路径,可以让无效的路劲跳转到错误提示页面

组件的$router属性的原型上有一些方法(this.$router)

vue 项目中当访问路由不存在的时候默认访问404页面操作

(1)go方法

(2)replace:用新的路径替换错误路径,同时创建错误页面的组件

a——b(不存在的路径)——c(用c取代了b);所以路径中就是a——c

(3)push:a——b(不存在的路径)——c(在b后面添加了c);所以路径就是a——b——c

vue 项目中当访问路由不存在的时候默认访问404页面操作

来源:https://www.cnblogs.com/mmzuo-798/p/10413888.html

标签:vue,路由,不存在,404
0
投稿

猜你喜欢

  • javascript表单验证和Window详解

    2023-07-14 02:14:38
  • MySQL系列数据库设计三范式教程示例

    2024-01-25 08:15:07
  • 浅谈python numpy中nonzero()的用法

    2021-09-23 00:06:01
  • oracle删除已存在的表的实例

    2024-01-16 19:24:58
  • jQuery事件的绑定、触发、及监听方法简单说明

    2024-02-24 12:50:53
  • Python实例练习水仙花数问题讲解

    2023-05-26 18:38:11
  • SQLServer2005安装提示服务无法启动原因分析及解决

    2024-01-16 03:02:26
  • Python实现求解一元二次方程的方法示例

    2023-09-15 03:29:41
  • python实现飞机大战小游戏

    2022-05-05 05:14:46
  • 无忧贴子管理器(ListView组件)

    2009-01-02 17:56:00
  • go语言 全局变量和局部变量实例

    2024-04-26 17:18:56
  • Python MySQLdb 执行sql语句时的参数传递方式

    2024-01-28 08:45:33
  • python安装scipy的步骤解析

    2021-09-09 03:20:36
  • MySQL中修改表结构时需要注意的一些地方

    2024-01-29 09:04:11
  • 详解Mysql基础语法的使用

    2024-01-28 07:50:05
  • python正则表达式匹配不包含某几个字符的字符串方法

    2023-06-11 16:52:45
  • centos7通过yum安装mysql的方法

    2024-01-18 06:48:57
  • 为MySQL提权简单方法

    2009-08-29 15:21:00
  • 使用Python生成XML的方法实例

    2022-10-01 19:20:15
  • Python 导入文件过程图解

    2021-06-04 12:31:34
  • asp之家 网络编程 m.aspxhome.com