Axios
基础
- 基于Promise进行XHR封装
axios封装了什么?
- API 常用REST
- Interceptor 拦截器(请求 && 响应)
- Error Handle 错误处理
- Request Cancel 取消请求
- Promise Syntax 基于Promise异步
- JSON Response 响应JSON封装
基本使用
js
axios(config)
axios.request(config)
axios.create() // 多用
axios.get/post/delete/head...
config
HTTP相关
- url
- baseURL
- method
- params
- headers
- auth
数据相关
- data
- transformRequest
- transformResponse
- js
// 针对某个实例进行特定config配置 instance.default.xxx
并发请求
``js
可通过axios.spread()展开结果
axios.all([
Axios-instance,
Axios-instance,
Axios-instance
])
拦截器
拦截器基于Promise, 对应的需要返回Promise
请求拦截器
- 使用场景:
- [优化体验]——请求时的体验优化: loading icon
- [验证]——对用户token验证
- [参数序列化]——请求参数序列化
- [版本控制]——基于URL的版本控制(replace URI)
- [节流]——多次请求保持唯一
- 使用场景:
响应拦截器
- 使用场景:
- 针对响应码分类处理
- 使用场景:
基本使用 插件: 请求重试(axios-retry) / 支持跨域(axios-jsonp)
js
// 未对拦截器进行函数封装
// 1. 创建实例, 配置相关的config; 2. 设置请求拦截器和相应拦截器;
const instance = axios.create({
baseUrl: fromEnv,
timeout: 3000
})
// 每次请求前验证当前是否有token, 若有则拿出并为header中设置为X-Token字段
instance.interceptors.request.use(config=>{
config.headers['X-Token'] = store.getters.token && store.getters.token ()
return config
}, error=>{
console.error(error)
return Promise.reject(error)
})
// 每次收到相应前判断状态码是否为20000, 若不是则返回Promise[reject]
instance.interceptors.response.use(res=>{
return res.code === 20000 ? res : Promise.reject("Error")
}, error=>{
console.error(error)
return Promise.reject(error)
})
export default isntance
js
// 添加拓展
async function requestInterceptor(){
const res = await instance.interceptors.request.use(config=>{
config.headers['X-Token'] = store.getters.token && store.getters.token ()
return config
}, error=>{
console.error(error)
return Promise.reject(error)
})
}
let data = res.data || undefined
// 业务代码
return data