Vue中的请求拦截器和响应拦截器

11 篇文章 1 订阅

前置

大家好,我又来了,我们今天就讲一下什么是请求拦截器,和请求拦截器的作用,好了,多余的话我就不说了,马上开始今天的讲解

开始啦


在这里插入图片描述

请求拦截器

请求拦截器的作用是:

在请求发送前进行一些操作,例如在每个请求体里面加上token,统一做了处理的,如果要更改也是非常的容易。

关于拦截

这里只说原理,前端的请求,最终离不开Ajax,像Vue的Vue-ResourceAxios,都只是对Ajax进行了统一的封装,它暴露出来的拦截器,其实就是写了一个方法,把Ajax写在这个方法里面(我们先说请求拦截器)在执行的时候,先将请求时要添加给请求头的那些数据(Token、后端要的加密的密码)先执行一遍,都赋值给一个变量,然后再统一传给Ajax,接下来,就是执行Ajax,这就是所谓的请求拦截器,其实就是先执行要添加的数据,然后再执行Ajax,如果把这个添加数据的过程抽出来,就成了所谓的请求拦截器了

// 请求超时时间
axios.defaults.timeout = 120000

// 添加请求拦截器
axios.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    // 判断是否存在token,如果存在将每个页面header都添加token
    if (window.sessionStorage.getItem('DT')) {
      // 请求头配置全局token
      config.headers.DT = window.sessionStorage.getItem('DT')
    }
    return config
  },
  err => {
    // 对请求错误做些什么
    Vue.prototype.$message.error('请求超时')
    return Promise.reject(err)
  }
)

响应拦截器

响应拦截器的作用就是

在接收到响应后再进行一些操作,例如在服务器返回登录状态失效的时候,需要重登录,跳转到登录页面,
响应拦截器,就是是在请求结果的返回后的同时,先不直接导出,而是先对响应码等等的进行处理,处理好之后再导出给页面,如果将这个对象响应码的处理过程抽出来,就成了所谓的响应拦截器
代码如下

// 响应拦截器
axios.interceptors.response.use(
  response => {
    // res是响应的结果
    switch (response.data.code) {
      case 401:
        // 登录失效
        // 响应成功的拦截
        console.log('响应拦截器:')
        // console.log(response.data)
        Vue.prototype.$message.error(response.data.message)
        sessionStorage.removeItem('DT')
        router.push('/login')
        break
      case 404:
        if (response.data.message !== null) {
          Vue.prototype.$message.error(response.data.message)
        } else {
          Vue.prototype.$message.error('未知错误')
        }
        break
      case 500:
        // 错误
        if (response.data.message !== null) {
          Vue.prototype.$message.error(response.data.message)
        } else {
          Vue.prototype.$message.error('未知错误')
        }
        break
      default:
        return response
    }
    return response
  },
  err => {
    if (err.response.data.message) {
      Vue.prototype.$message.error(err.response.data.message)
      return Promise.reject(err.response.data.message) // 返回接口返回的错误信息
    } else {
      // 返回状态码不为200时候的错误处理
      Vue.prototype.$message.error(err.toString())
      return Promise.resolve(err)
    }
  }
)

页面中请求接口时:

// 用户登录提交
    login() {
      // debugger
      this.$refs.loginFormRef.validate(async valid => {
        if (!valid) return
        if (valid) {const userInfo = {
            username: this.loginForm.username,
            password: this.loginForm.password
          }
          // 登录之前去除token
          window.sessionStorage.removeItem('DT')
          const { data: res } = await this.$http.post('/system/login', userInfo)
          if (res.code !== 200) {
            this.initCaptcha()
            return
          }
          this.$message.success('登录成功')
          window.sessionStorage.setItem('DT', res.result.token)
          this.$router.push('/main')
        }
      })
    }
 

总结


  • 请求拦截器:其实就是先执行要添加的数据,然后再执行Ajax,如果把这个添加数据的过程抽出来,就成了所谓的请求拦截器了
  • 响应拦截器:就是是在请求结果的返回后的同时,先不直接导出,而是先对响应码等等的进行处理,处理好之后再导出给页面,如果将这个对象响应码的处理过程抽出来,就成了所谓的响应拦截器
  • 12
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Vue,在响应拦截器跳转路由可以通过使用Vue Router实现。要在响应拦截器跳转路由,首先需要在项目引入Vue Router,并在main.js或者需要使用路由的文件进行配置。 首先,需要在项目安装Vue Router,可以使用npm或者yarn进行安装。然后,在main.js文件引入Vue Router并配置: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' import App from './App.vue' Vue.use(VueRouter) const router = new VueRouter({ routes: [ // 定义路由信息 { path: '/home', component: Home }, { path: '/about', component: About }, // ... ] }) new Vue({ router, render: h => h(App) }).$mount('#app') ``` 然后,在需要使用响应拦截器的地方进行配置: ```javascript import axios from 'axios' import router from './router' axios.interceptors.response.use(response => { // 在响应拦截器对返回的响应进行逻辑处理 if (response.status === 200) { // 根据逻辑判断,如果需要跳转路由,可以使用router.push方法实现跳转 router.push('/home') // 这里是示例,跳转到名为home的路由 } return response }, error => { return Promise.reject(error) }) ``` 在上述代码,我们使用router.push方法在响应拦截器跳转到指定的路由。通过在Vue Router定义路由规则,我们指定了需要跳转的目标路由。当满足某个条件时,我们调用router.push方法进行路由跳转。 需要注意的是,我们需要确保在使用router实例之前Vue Router已经完成了初始化和配置。在main.js文件,我们在创建Vue实例之前初始化并传入了router实例。 这样,在响应拦截器调用router.push方法就可以实现路由的跳转了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白在线学前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值