1 axios -> 基于Promise对象 -> async & await
2 create阶段 -> 返回Promise对象 -> 返回的数据可以直接解构【数据处理】
- 要写入实例的数据(即页面渲染使用的数据),需要用配置参数data接收
3 import axios from 'axios';
4 多次导入、使用的axios -> 将axios放在原型链上
import axios from 'axios';
Vue.prototype.axios = axios;
5 请求方法的别名
-
axios.request(config)
-
axios.get(url[, config])
-
axios.delete(url[, config])
-
axios.head(url[, config])
-
axios.options(url[, config])
-
axios.post(url[, data[, config]])
-
axios.put(url[, data[, config]])
-
axios.patch(url[, data[, config]])
6 拦截器
// 添加请求拦截器
axios.interceptors.request.use(config => {
// 在发送请求之前做些什么
return config;
}, error => {
// 对请求错误做些什么
return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(response => {
// 对响应数据做点什么
return response;
}, error => {
// 对响应错误做点什么
return Promise.reject(error);
});
6.1 请求拦截应用
axios.interceptors.request.use(config => {
// 在发送请求之前做些什么
let token = sessionStorage.getItem('userTk');
if (token) {
config.headers.Authorization = token
}
return config
}, error => {
// 对请求错误做些什么
return Promise.reject(error);
});
6.2 响应拦截应用
axios.interceptors.response.use(response => {
if (response.data.code === '200') {
Auth.setToken(sessionStorage.getItem('userId'))
}
return response;
},
error => {
console.warn(error);
console.warn(error.response);
if ((error.response.status && error.response.status === 401) || error.response.statusCode === 401) {
// 已超时
Auth.removeToken(sessionStorage.getItem('userId'));
sessionStorage.clear();
router.replace('/login')
return Promise.reject('身份已过期,请重新登录!');
}
if(error.response && error.response.status === 500)
return Promise.reject('服务异常,请稍后重试!');
});