Skip to content

Axios 中的拦截器可以分为请求拦截器和响应拦截器。

分别可以用于在发送请求接收响应之前,对数据做额外转换、或其他操作。

由于 Axios 是支持 promise 的,所以拦截器的设置也参照了 Promise 中的 resolvereject

6-1.请求拦截器

一个简单的请求拦截器实例如下:

js
const resolveRequest = config => {
  console.log(config)
  return config
}
const rejectRequest = error => {
  return Promise.reject(error)
}

axios.intercepters.request.use(resolveRequest, rejectRequest)

我们简单的打印下请求拦截器中的 config

另外,请求拦截器和响应拦截器,都是可以注销解绑的。以请求拦截器为例:

js
const requestInterceptor = axios.intercepters.request.use(resolveRequest, rejectRequest)

axios.intercepters.request.eject(requestInterceptor)

6-2.响应拦截器

一个简单的响应拦截器示例如下:

js
const resolveResponse = response => {
  console.log(response)
  return response
}
const rejectResponse = error => {
  return Promise.reject(error)
}

axios.intercepters.request.use(resolveResponse, rejectResponse)

在前文中,介绍到了 config 中的 validateStatus 属性。它的默认配置是:

js
const defaultsConfig = {
  validateStatus: function validateStatus(status) {
    return status >= 200 && status < 300;
  }
}

那么可以推断出的是,当 http 状态码在 [200, 300) 之间的时候,Axios 会将响应当做成功响应

那么也就是说 http 状态码在 [200, 300) 之间时,在响应拦截器中会命中 resolveResponse 回调函数。

其余 http 状态码则会命中 rejectResponse 回调函数。

另外,我们在此处也打印下响应拦截器中的 response