当前位置:   article > 正文

什么是axios拦截器?有哪些作用和使用场景_axios拦截器作用

axios拦截器作用

axios拦截器

拦截器介绍

一般在使用axios时,会用到拦截器的功能,一般分为两种:请求拦截器、响应拦截器。

  1. 请求拦截器 在请求发送前进行必要操作处理,例如添加统一cookie、请求体加验证、设置请求头等,相当于是对每个接口里相同操作的一个封装;

  2. 响应拦截器 同理,响应拦截器也是如此功能,只是在请求得到响应之后,对响应体的一些处理,通常是数据统一处理等,也常来判断登录失效等。

比如一些网站过了一定的时间不进行操作,就会退出登录让你重新登陆页面,当然这不用拦截器你或许也可以完成这功能,但是会很麻烦而且代码会产生大量重复,所以我们需要用到拦截器

  1. 应用场景:
  2. 1:每个请求都带上的参数,比如token,时间戳等。
  3. 2:对返回的状态进行判断,比如token是否过期

axios的拦截器作用非常大。axios的拦截器分为请求拦截器跟响应拦截器,都是可以设置多个请求或者响应拦截。每个拦截器都可以设置两个拦截函数,一个为成功拦截,一个为失败拦截。在调用axios.request()之后,请求的配置会先进入请求拦截器中,正常可以一直执行成功拦截函数,如果有异常会进入失败拦截函数,并不会发起请求;调起请求响应返回后,会根据响应信息进入响应成功拦截函数或者响应失败拦截函数。

因此,我们可以在拦截器中处理一些请求的统一处理。比如在请求拦截器中设置请求头,处理统一的请求数据,在响应拦截去中根据响应状态码做统一的提示信息,整理响应数据等。

在请求或响应被 then 或 catch 处理前拦截它们。

  1. // 官方用例
  2. // 1.添加请求拦截器
  3. axios.interceptors.request.use(function (config) {
  4.    // 在发送请求之前做些什么
  5.    return config;
  6. }, function (error) {
  7.    // 对请求错误做些什么
  8.    return Promise.reject(error);
  9. });
  10. // 2.添加响应拦截器
  11. axios.interceptors.response.use(function (response) {
  12.    // 对响应数据做点什么
  13.    return response;
  14. }, function (error) {
  15.    // 对响应错误做点什么
  16.    return Promise.reject(error);
  17. });

1.axios-请求拦截器

目标

  • 什么是请求

  • 什么是axios的请求拦截器

场景

  • 在发起请求之前, 最后对要发送的请求配置对象进行修改

  • 例如: 如果本地有token, 携带在请求头给后台

    1. // 添加请求拦截器--代码实现案例:仅供参考
    2. axios.interceptors.request.use(function (config) {
    3.  // 在发送请求之前做些什么, 如果vuex里有token携带在请求头中
    4.  if (store.state.token.length > 0 && config.headers.Authorization === undefined) {
    5.    // 发起请求之前, 把token携带在请求头上(表明自己身份)
    6.    config.headers.Authorization = 'Bearer ' + store.state.token
    7. }
    8.  return config
    9. }, function (error) {
    10.  // 对请求错误做些什么
    11.  return Promise.reject(error)
    12. })
  • 所有api接口里以后暂时不用自己携带Headers+Token了,简略代码,统一管理

小结

  1. 请求拦截器时候时候执行?

    • 在发起请求最后一刻执行

2.axios-响应拦截器

目标

  • 什么是响应

  • 什么是axios的响应拦截器

场景

  • 在响应回来后, 马上执行响应拦截器函数

  • 例如: 判断是否错误401, 统一进行权限判断

    1. // 添加响应拦截器--代码实现案例:仅供参考
    2. axios.interceptors.response.use(function (response) { // 当状态码为2xx/3xx开头的进这里
    3.     // 对响应数据做点什么
    4.     return response
    5. }, async function (error) { // 响应状态码4xx/5xx进这里
    6.     // 对响应错误做点什么
    7.    if (error.response.status === 401) { // 身份过期/token无效
    8.     //  1.清空vuex的token 
    9.     store.commit('setToken', '')
    10.     store.commit('setRefreshToken', '')
    11.     // 2. 清空本地token 
    12.     localStorage.removeItem('token')
    13.     localStorage.removeItem('refresh_token')
    14.     //  跳转到登录页面登录
    15.     router.push({
    16.       path: '/login'
    17.     })
    18.   }     
    19.     return Promise.reject(error)
    20. })

小结

  1. 响应拦截器什么时候执行?

    • 在响应回来以后

  2. 什么时候进响应拦截器成功, 什么时候进失败?

    • 2xx/3xx开头的响应状态码进入成功

    • 4xx/5xx开头的响应状态码进入失败

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/57112?site
推荐阅读
相关标签
  

闽ICP备14008679号