axios请求拦截和响应拦截

在我们平常调用接口的时候,会使用到拦截器这个工具,大致有两种用法,请求拦截和响应拦截。

请求拦截

axios.interceptors.request.use((config)=>{
   return config
},(error)=>{

    return Promise.reject(error)
})

解析:请求拦截这个时候请求还没用发送出去,可以在config里面加一些东西,如在请求头里面携带token,此时还没有到达服务器,error关联的是请求错误返回的信息。举个例子,当你发送请求的时候,这个时候网络被中断,请求还没有到达服务器,但是报错了,这个使用会走error,通常也会进行返回一个Promise对象。

响应拦截

axios.interceptors.response.use((config)=>{
   return config
},(error)=>{

    return Promise.reject(error)
})

解析:此时的请求已经到达了服务器,但是还没有到达客户端,可以对config进行一些操作,例如

进行一层结构的解析,返回return  config.data,做一些统一错误处理,请求的时候只管成功,不管失败。error-------------它代表的是响应错误的返回值,如401,404,500的错误,权限不够,参数错误等一些列的错误:

代码

if(status===401){

  alert('权限不够') 
}
else (status===404){

 alert('参数错误')
}
else{
 alert('其它错误')
}

token失效的处理

service.interceptors.response.use(
  (response) => {
      // dosomething
  },
  (error) => {
    // ! 服务器响应失败时,干些事情: 导致响应失败的原因有很多,其中之一是 token 过期
    // 响应失败时的error(错误对象),它经过了axios的2层包装,服务器响应的真实数据在 error.response.data 中。
    // axios包装的提示信息是:error.message,与服务器响应的真实数据是两回事
    const realData = error.response.data
    /* 处理token失效---后端处理 */
    if (error.response && realData && realData.code === 233333) {
      // 以上三个条件全部满足时,才说明token超时
      // 1. 触发actions中的logout函数,清除无效token、当前用户信息
      store.dispatch('user/logout')
      // 2. 跳转到登录页面
      router.push({ path: '/login' })
      // 3. return 一个执行错误,用于终止当前的promise执行链
      return Promise.reject(error)
    } else {
      /*  如果token未失效,则是其他错误 */
      // 1. 提示错误信息
      Message.error(realData.message)
      // 2. return 一个执行错误
      return Promise.reject(error)
    }
  }
)

view:

分析:

        在请求拦截的时候此时请求还没有到达服务器。

        在响应拦截的时候响应还没到达客户端。

### 如何在 Axios 中实现请求响应拦截 #### 创建 Axios 实例并配置基础 URL 其他选项 为了更好地管理定制 HTTP 请求,通常会创建一个 Axios 的实例,并为其指定一些全局配置项。 ```javascript // 引入 axios 库 import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // 设置默认的基础URL timeout: 5000 // 超时时间设置为5秒 }); ``` #### 添加请求拦截器 通过 `service.interceptors.request.use()` 方法可以注册一个函数,在每次发起请求之前执行该函数。这允许修改即将发送出去的请求参数或添加必要的头部信息等操作。 ```javascript service.interceptors.request.use( config => { // 可在此处加入身份验证token或其他公共头文件 if (store.getters.token) { config.headers['Authorization'] = 'Bearer ' + store.getters.token; } return config; // 返回配置对象继续下一步流程 }, error => Promise.reject(error) ); ``` #### 添加响应拦截器 同样地,`service.interceptors.response.use()` 用于监听所有的HTTP响应数据。可以在接收到服务器返回的数据之后做一些预处理工作,比如统一处理错误码、显示加载动画结束等等。 ```javascript service.interceptors.response.use( response => response.data, // 如果状态码是2xx,则直接返回response中的data部分 error => { console.log('err' + error); // 对于网络错误打印日志 let message = ''; switch (error.response.status) { case 401: message = "未授权"; break; case 403: message = "拒绝访问"; break; case 404: message = "请求地址出错"; break; default: message = "连接到服务器失败"; } Message.error(message); return Promise.reject(error); }); ``` 以上代码片段展示了如何利用 Axios 提供的功能来增强应用程序发出的每一个 AJAX 请求的安全性用户体验[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值