Vue2.x --导航守卫、axios请求响应拦截器、对象解构

导航守卫

用来通过跳转或取消的方式守卫导航
参数或查询的改变并不会触发进入/离开的导航守卫

- 前置守卫 — router.beforeEach
路由跳转前做相应处理

//判断跳转至用户页前是否有token
//to是目的路由,from是触发路由,next是下一步的函数
//PS:一定调用next作为导航守卫的出口,否则一直在等待
router.beforeEach((to, from, next) => {
  const hasToken = localStorage.getItem('token')
  if (to.name === 'user' ) {
    if (hasToken) {
      return next()
    } else {
    return router.replace("/login")
    }
  }
  return next()
})

- 代码优化
随着项目的推进,需要用到导航守卫的路由地址或许会很多个,避免守卫里的判断条件过多,可以再路由中加入是否要进入导航守卫的参数meta: { isAuthor: true }

//其中注册不需要token,个人页需要token,即个人页需要用到导航守卫

const router = new VueRouter({
  routes = [
 {
      //注册页
      path: '/register',
      name: 'register',
      component: () => import('@/views/user/register.vue')
    },
    {
      //个人页
      path: '/user',
      name: 'user',
      component: () => import('@/views/user/user.vue'),
      //添加认证配置
      meta: { isAuthor: true }
    },
]
})

//此时判断目的路由中meta配置的isAuthor是否为true
router.beforeEach((to, from, next) => {
  const hasToken = localStorage.getItem('token')
  if (to.meta.isAuthor) {
    if (hasToken) {
      return next()
    } else {
        return router.replace("/login")
    }
  }
  return next()
})


axios请求响应拦截器 – axios.interceptors.response.use

统一处理响应错误

  • 原理
    在这里插入图片描述
  • 配置
//由于是监听全局的请求结果,所以可以在全局文件main.js使用
//如果请求失败,则提示 --- 用的是vant中的轻提示 toast 

import axios from "axios"
import { Toast } from 'vant';

// axios响应拦截器
axios.interceptors.response.use(res => {
    const { message, statusCode } = res.data;
    //请求结果错误监听,如果请求结果的状态码是4开头的,则都是请求失败
    const errRegExp = /^4\d{2}$/;

    //错误提醒
    if (message && errRegExp.test(statusCode)) {
        setTimeout(() => {
            Toast.fail(`${message},请重新登录`);
        }, 500);
    }
    //处理完后一定要return放行
    return res;
})

额外的查漏补缺:
对象解构

//一级解构
let obj ={name:'A',age:12,person:{name2:'B',age2:13}}

let {name,age,person} = obj
console.log(name,age,person) //A 12 {name: "B", age: 13}

//二级解构
let {person:{name2,age2}} = obj
console.log(name2,age2) //  B 13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值