resful配置自己配置吧我懒的写
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) // 移除当前请求记录
}
})
}
我们用一个数组包含所有请求 在每次请求的时候判断是不是刚刚请求了 如果请求了就取消这个请求
表现出来的就是这样了
全局loading:
先引入element的loading
import { Loading } from 'element-ui'
let loading
添加函数设置loading展示隐藏
let startLoading = () => { // 使用Element loading-start 方法
loading = Loading.service({
lock: true,
text: '加载中……'
// background: 'rgba(0, 0, 0, 0.7)'
})
}
let endLoading = () => { // 使用Element loading-close 方法
loading.close()
}
然后在拦截器中添加函数
具体代码在这里:
import axios from 'axios'
import Cookies from 'js-cookie'
import { Loading } from 'element-ui'
let loading
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) // 移除当前请求记录
}
})
}
let startLoading = () => { // 使用Element loading-start 方法
loading = Loading.service({
lock: true,
text: '加载中……'
// background: 'rgba(0, 0, 0, 0.7)'
})
}
let endLoading = () => { // 使用Element loading-close 方法
loading.close()
}
// 创建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})
})
startLoading()
return config
},
(error, response) => {
console.log(error)
console.log(response)
}
)
service.interceptors.response.use(
response => {
endLoading()
cancelPending(response.config)
return response.data
}, error => {
console.log(error)
return Promise.reject(error)
}
)
export default service