import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
import store from '../store'
import { getToken } from '@/utils/auth'
// 创建axios实例
const service = axios.create({
baseURL: `/v-api`,
timeout: 15000,
})
// request拦截器
service.interceptors.request.use(
config => {
if (store.getters.token) {
config.headers['Authorization'] = `Bearer ${getToken()}` // 让每个请求携带自定义token
}
// console.log(config)
return config
},
error => {
// Do something with request error
console.log(error) // for debug
Promise.reject(error)
}
)
//response 拦截器
service.interceptors.response.use(
response => {
if (response.status == '401') {
Message({
message: '用户无权限!',
type: 'warning'
});
// store.dispatch('FedLogOut').then(() => {
// location.reload()
// })
return Promise.reject('error')
}
if (response.status == '203') {
MessageBox.confirm(
'你已被登出,可以取消继续留在该页面,或者重新登录',
'确定登出', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
closeOnPressEscape: false,
closeOnClickModal: false,
type: 'warning'
}
).then(() => {
store.dispatch('FedLogOut').then(() => {
location.reload()
})
})
return Promise.reject('error')
}
const res = response.data
if (res.code && res.code != '200') {
if (res.code == '504') {
MessageBox.confirm(
'你已被登出,可以取消继续留在该页面,或者重新登录',
'确定登出', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
store.dispatch('FedLogOut').then(() => {
location.reload()
})
})
} else if (res.code == '-1') {
Message({
message: '程序繁忙,请稍后再试!',
type: 'error',
duration: 5 * 1000
})
} else if (res.code == '201') {
MessageBox.alert(
'提示:' + res.message,
'', {
type: 'warning'
}
)
return res
} else if (res.code == '204') {
return res
} else {
Message({
message: '操作错误, ' + res.message,
type: 'error',
duration: 5 * 1000
})
}
return Promise.reject('error')
} else {
return res
}
},
error => {
// console.log('err' + error) // for debug
Message({
message: error.response.data.message || '网络错误,请联系管理员!',
type: 'error',
duration: 5 * 1000
})
if (error.response.data.code == '416') {
MessageBox.confirm(
'用户信息过期,请重新登录',
'确定登出', {
confirmButtonText: '重新登录',
showCancelButton: false,
type: 'warning'
}
).then(() => {
store.dispatch('FedLogOut').then(() => {
location.reload()
})
})
}
return Promise.reject(error.response.data) // 返回接口返回的错误信息
})
export default service
搭配elmentui使用的axios拦截器
最新推荐文章于 2023-03-18 09:52:34 发布