security-wiki/src/utils/http.ts

59 lines
1.7 KiB
TypeScript

import axios, {AxiosInstance,AxiosRequestConfig,AxiosResponse} from "axios";
import { message } from "antd";
import Cookie from 'js-cookie'
import { IResponse } from "../type";
import confirm from "antd/lib/modal/confirm";
import { AlertTwoTone } from '@ant-design/icons';
const service: AxiosInstance = axios.create({
baseURL: process.env.REACT_APP_APIPATH,
headers: {
'Content-Type': 'application/json',
},
timeout: 10000
})
// 添加请求拦截
service.interceptors.request.use((config:AxiosRequestConfig)=>{
const token: string | null = Cookie.get('authorization') || '';
if(config && config.headers && token) {
config.headers.authorization = token
}
return config
},(error:any)=>{
return Promise.reject(error)
})
const request = async <T=any>(config:AxiosRequestConfig): Promise<IResponse<T>> => {
try {
const response = await service.request<IResponse<T>>(config)
return response.data
} catch(err: any) {
switch(err.response.status) {
case 401 : confirm({
title:'提示',
content: '登录过期,请重新登录',
onOk() {
Cookie.remove('authorization');
window.location.href = 'wenhua.com/';
},
onCancel() {
},
});
break;
case 403 : message.error('禁止访问');
break;
case 404 : message.error('页面或接口地址不存在');
break;
case 405 : message.error('数据传输格式错误');
break;
default : message.error('系统未知错误!');
break;
}
message.error(err.message)
return {
code: -1,
msg: 'error',
data: null as any
}
}
}
export default request;