45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { createAlova } from 'alova'
|
|
import VueHook from 'alova/vue'
|
|
import adapterFetch from 'alova/fetch'
|
|
import { ElMessage } from 'element-plus'
|
|
|
|
export const request = createAlova({
|
|
baseURL: import.meta.env.VITE_API_BASEURL || '',
|
|
// 设置为null即可全局关闭全部请求缓存
|
|
cacheFor: null,
|
|
statesHook: VueHook,
|
|
requestAdapter: adapterFetch(),
|
|
beforeRequest(method) {
|
|
const token = localStorage.getItem('admin_token')
|
|
if (token) {
|
|
method.config.headers = { ...method.config.headers, Authorization: `Bearer ${token}` }
|
|
}
|
|
},
|
|
responded: {
|
|
onSuccess: async (response) => {
|
|
const data = await response.json()
|
|
if (data.code !== 200) {
|
|
if (response.status === 401 || data.code === 401) {
|
|
localStorage.removeItem('admin_token')
|
|
window.location.href = '/login'
|
|
throw new Error('redirect')
|
|
}
|
|
ElMessage.error(data.msg)
|
|
throw new Error(data.msg)
|
|
}
|
|
return data
|
|
},
|
|
onError: (error) => {
|
|
if (error?.message === 'redirect') return
|
|
if (error?.response?.status === 401) {
|
|
localStorage.removeItem('admin_token')
|
|
window.location.href = '/login'
|
|
return
|
|
}
|
|
ElMessage.error(error.message || '请求失败')
|
|
},
|
|
},
|
|
})
|
|
|
|
export default request
|