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


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

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

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

    优点:简单、方便;

    缺点:如果项目中添加了判断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'
            })
          }
        }
      }
    })
  • 相关阅读:
    Linux常用命令琐记
    JDK 在linux下支持epoll了
    八卦
    JDK 1.6中的并发
    关于Atomic
    关于并发程序设计(二)
    关于并发程序设计 (一)
    Herb Sutter的一些观点
    想到Exchanger N parties的一种用法
    该拒绝MSN Messager了
  • 原文地址:https://www.cnblogs.com/m1754171640/p/13753572.html
Copyright © 2020-2023  润新知