vue中访问不存在路由默认跳转404页面实现方法

今天做新项目发现,当访问的页面路由不存在的时候,页面显示一片空白,需要新增一个404错误页面,那么怎么才能跳转到这个404页面呢

方法:在路由页面,一般文件名为index.js ,在最后添加一个path:*; 优先级从上到下查找路由,都没有的时候全部指向 404页面 ,代码如下:

   我把index.js文件放在router文件夹下;一般也会放在page文件下或者views文件夹有这么一个index.js文件

vue中访问不存在路由默认跳转404页面实现方法

vue中访问不存在路由默认跳转404页面实现方法

vue中访问不存在路由默认跳转404页面实现方法

优点:简单、方便;

缺点:如果项目中添加了判断token失效跳出登录然后记住当前页面,登录时候自动跳转到上次token失效的页面,就会有问题,如果故意输入不存在的路由就会在404,失效退出然后登陆后就会自动跳到这个404页面,那样就尴尬了;如果没有这个功能,用上述方法还是比较好使的

解决方法:在index.js文件中注释刚刚加入的path:* 这些东西

在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'
        })
      }
    }
  }
})