72 lines
1.8 KiB
TypeScript
72 lines
1.8 KiB
TypeScript
import { message } from 'antd'
|
|
import axios from 'axios'
|
|
|
|
export const baseHttp = () => {
|
|
const http = axios.create({
|
|
baseURL: '/subject',
|
|
timeout: 5 * 60 * 1000, // request timeout
|
|
withCredentials: true, // send cookies when cross-domain requests
|
|
headers: {
|
|
'Content-Type': 'application/json; charset=utf-8'
|
|
}
|
|
})
|
|
|
|
return http
|
|
}
|
|
|
|
export default function request(config, url) {
|
|
console.log(config, url, 'config url')
|
|
// const navigate = useNavigate()
|
|
const userInfoStorage = localStorage.getItem('userInfo')
|
|
const userInfo = userInfoStorage ? JSON.parse(userInfoStorage) : {}
|
|
const baseURL = url || '/subject/subject'
|
|
// 1.创建axios的实例
|
|
const instance = axios.create({
|
|
baseURL,
|
|
timeout: 5 * 60 * 1000, // request timeout
|
|
withCredentials: true, // send cookies when cross-domain requests
|
|
headers: {
|
|
'Content-Type': 'application/json; charset=utf-8',
|
|
[userInfo.tokenName]: 'jichi ' + userInfo.tokenValue
|
|
}
|
|
})
|
|
|
|
// 2.axios的拦截器
|
|
// 2.1.请求拦截的作用
|
|
instance.interceptors.request.use(
|
|
config => {
|
|
return config
|
|
},
|
|
err => {
|
|
console.log(err)
|
|
}
|
|
)
|
|
|
|
// 2.2.响应拦截
|
|
instance.interceptors.response.use(
|
|
res => {
|
|
let { code } = res.data
|
|
if (code === 500) {
|
|
message.error(res.data.message)
|
|
}
|
|
if (code === 401) {
|
|
window.location.replace('/login')
|
|
}
|
|
return res.data
|
|
},
|
|
err => {
|
|
let { status } = err?.response ?? {}
|
|
if (status === 401 || !status) {
|
|
message.info('页面异常')
|
|
window.location.replace('/login')
|
|
} else if (status === 500 || status === 503) {
|
|
message.error('服务器错误')
|
|
}
|
|
return Promise.reject(err)
|
|
}
|
|
)
|
|
|
|
// 3.发送真正的网络请求
|
|
return instance(config)
|
|
}
|