版权声明:一个被隔壁肥宅嘲笑的... https://blog.csdn.net/weixin_38641550/article/details/84940663
axios 封装 首先引入axios 创建实例
import axios from 'axios'
// 创建axios实例
const service = axios.create({
baseURL: process.env.BASE_API, // api的base_url
timeout: 6000 // 请求超时时间
})
然后加入axios的拦截器
service.interceptors.request.use(
config => {
return config
},
(error, response) => {
console.log(error)
console.log(response)
}
)
service.interceptors.response.use(
response => {
return response.data
}, error => {
console.log(error)
return Promise.reject(error)
}
)
export default service
这个就简单的处理了封装 然后我们继续封装 判断用户的token根据用户token给请求头
即在拦截器请求判断你的用户是不是登录了(这里用到了js-cookie)
import Cookies from 'js-cookie'
if (Cookies.get('Admin-Token')) {
config.headers['Authorization'] = Cookies.get('Admin-Token')
}
这里正常的封装就完事了
然后我们加入 当多次请求的时候去除上一次请求
let pending = []
let CancelToken = axios.CancelToken
let cancelPending = (config) => {
pending.forEach((item, index) => {
if (config) {
if (item.UrlPath === config.url) {
item.Cancel() // 取消请求
pending.splice(index, 1) // 移除当前请求记录
};
} else {
item.Cancel() // 取消请求
pending.splice(index, 1) // 移除当前请求记录
}
})
}
我们用一个数组包含所有请求 在每次请求的时候判断是不是刚刚请求了 如果请求了就取消这个请求
表现出来的就是这样了
具体代码在这里:
import axios from 'axios'
import Cookies from 'js-cookie'
let pending = []
let CancelToken = axios.CancelToken
let cancelPending = (config) => {
pending.forEach((item, index) => {
if (config) {
if (item.UrlPath === config.url) {
item.Cancel() // 取消请求
pending.splice(index, 1) // 移除当前请求记录
};
} else {
item.Cancel() // 取消请求
pending.splice(index, 1) // 移除当前请求记录
}
})
}
// 创建axios实例
const service = axios.create({
baseURL: process.env.BASE_API, // api的base_url
timeout: 600000 // 请求超时时间
})
service.interceptors.request.use(
config => {
if (Cookies.get('Admin-Token')) {
config.headers['Authorization'] = Cookies.get('Admin-Token')
}
cancelPending(config)
config.cancelToken = new CancelToken(res => {
pending.push({'UrlPath': config.url, 'Cancel': res})
})
return config
},
(error, response) => {
console.log(error)
console.log(response)
}
)
service.interceptors.response.use(
response => {
cancelPending(response.config)
return response.data
}, error => {
console.log(error)
return Promise.reject(error)
}
)
export default service