【前端学习日记】axios拦截器

先附上文档地址:axios中文文档|axios中文网 | axios

分类:请求拦截器,相应拦截器。

拦截器作用:在请求或响应被 thencatch 处理前拦截它们 ---官方解释

实际上说的似乎有点不正确。当一个请求发送出去后,再拦截有什么意义呢。

基于Promise浅显的理解,axios发起请求作为一个异步任务,会有两种结果,请求成功执行then方法里的代码,请求失败执行catch里面的代码,它会向下通过return进行一个链式的数据传递。所以一旦到了then或者catch之前,换句话说,就是请求已经完成了,不论请求成功还是请求失败。所以这个说法不太严谨。

实际流程:请求拦截器2-请求拦截器1-发送请求-服务器响应-响应拦截器1-响应拦截器2-response响应

2112的流程,是因为请求拦截器的工作流程是后设置先执行。

所以,应该这样理解拦截器的工作流程:当一个请求发起前,响应拦截器可以做一些什么,比如做一些判断;当服务器获得请求并处理请求后,响应拦截器可以做一些什么。这样看来,实际开发中应该是请求拦截器用的应该会多一些,毕竟只要发出了正确的请求,获得数据的是必然的。

通过代码测试一下:JS代码如下

<button onclick="testGet()">获取商品列表1</button><br> 

<script>
// <!-- 添加请求拦截器1(回调函数) -->
    axios.interceptors.request.use(
      //可以在发送请求做些什么
      config => {
        console.log('request interceptor1 success')
        // 输出一下config这个回调,看看有什么东西
        console.log(config)

        return config
      },
      // 对请求错误做些什么
      error => {
        console.log('request interceptor1 defeat')
        return Promise.reject(error)
      }
    )

// 请求拦截器2
    axios.interceptors.request.use(
      //可以在发送请求做些什么
      config => {
        console.log('request interceptor2 success')
        return config
      },
      // // 对请求错误做些什么
      error => {
        console.log('request interceptor2 defeat')
        return Promise.reject(error)
      }
    )

// <!-- 添加响应拦截器1 -->
      axios.interceptors.response.use(
        // 对响应的数据做些什么
        response => {
          console.log('response interceptor1 success')
        // 输出一下response回调,看看有什么东西
          return response
        },
        // 对响应的错误做些什么
        error => {
          console.log('response interceptor1 defeat')
          return Promise.reject(error)
        }
      )

// 响应拦截器2
      axios.interceptors.response.use(
        // 对响应的数据做些什么
        response => {
          console.log('response interceptor2 success')
          console.log(response)
          return response
        },
        // 对响应的错误做些什么
        error => {
          console.log('response interceptor2 defeat')
          return Promise.reject(error)
        }
      )


// 发送请求
    function testGet() {
      axios.get('http://localhost:3000/posts')
      .then(response => {
        console.log(response.data)
      })
      .catch(error => {
        console.log(error.message)
      })
    }
  </script>

控制台输出情况:

 可以看到执行的流程确实是21---12

首先,我们在请求发起前输出了一段文本:request interceptor2 success 和 request interceptor1 success,因为我这里是请求成功的,所以没有请求失败的输出。接着,请求成功后,对响应的数据可以做些什么,执行的是响应拦截器,输出了文本:response interceptor1 success和response interceptor2 success,响应成功,没有执行相应错误的输出。最后执行响应回调。

这里值得关注的是config和response这两个回调身上有什么东西:

 在控制台的输出可以看到,config身上携带了发起请求包含的所有东西,所以你可以在这个回调函数中对请求做些一些处理,如添加cancelToken之类的取消请求。而response身上则是携带着所有的响应的配置项,所以可以对响应的数据做一些什么处理。

 但一切的前提还是:发起请求。不然拦截器无法获取的具体的数据。也就无法工作了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Axios 拦截器是一种在请求发送和响应返回之前,对请求和响应进行处理的机制。Axios 拦截器可以用于添加请求头、验证请求数据、对响应数据进行处理等场景。 Axios拦截器是基于 Promise 实现的,每个拦截器都是一个 Promise,其 resolve 函数接收一个 config 对象或 response 对象作为参数。Axios 支持两种类型的拦截器:请求拦截器和响应拦截器。 请求拦截器会在请求发送之前执行,响应拦截器会在响应返回之后执行。请求拦截器可以用于添加请求头、验证请求数据等操作,响应拦截器可以用于对响应数据进行处理。 Axios拦截器原理可以简单概括为: 1. 创建一个 Axios 实例,并设置默认配置。 2. 将请求和响应拦截器添加到实例中。 3. 当发送请求时,按照顺序执行请求拦截器中的代码。 4. 如果请求拦截器中发生了错误,Promise.reject() 方法会直接返回错误信息。 5. 如果请求拦截器中没有发生错误,Axios 会将最终的请求参数发送给服务器。 6. 当服务器返回响应时,Axios 会按照顺序执行响应拦截器中的代码。 7. 如果响应拦截器中发生了错误,Promise.reject() 方法会返回错误信息。 8. 如果响应拦截器中没有发生错误,Axios 会将最终的响应结果返回给调用者。 总之,Axios 拦截器的原理就是在请求和响应之间插入一些处理代码,以实现对请求和响应的自定义处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值