Axios
中的拦截器可以分为请求拦截器和响应拦截器。
分别可以用于在发送请求或接收响应之前,对数据做额外转换、或其他操作。
由于 Axios
是支持 promise
的,所以拦截器的设置也参照了 Promise
中的 resolve
和 reject
。
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
: