import Axios, {
|
AxiosError,
|
AxiosResponse,
|
AxiosRequestConfig,
|
AxiosInstance
|
} from 'axios'
|
import { Session } from '@/utils/storage'
|
|
let controllers: AbortController[] = []
|
|
// const BASE_URL = 'https://hemobs.icoldchain.cn'
|
const BASE_URL='http://testbs.ihemodialysis.com'
|
const TIME_OUT = 10 * 1000
|
|
interface IResponseError {
|
code: number,
|
result: boolean,
|
message: string
|
}
|
|
/**
|
* 创建axios实例
|
*/
|
const instance: AxiosInstance = Axios.create({
|
baseURL: BASE_URL,
|
timeout: TIME_OUT
|
// withCredentials: true
|
})
|
|
/**
|
* 错误处理函数
|
*/
|
const errorMsgHandler = (code:any, data:any): string | undefined => {
|
const { message } = data
|
return message+'请求错误'
|
}
|
|
const errorHandle = (error:any): IResponseError => {
|
const { data, status, statusText } = error.response
|
const msg = errorMsgHandler(status, data) || `${status} error ${data ? data.message : statusText}`
|
alert(msg)
|
return {
|
code: status,
|
result: false,
|
message: msg
|
}
|
}
|
|
/**
|
* 获取token,根据项目中后台的传递方式调整。这里使用的是cookie传递
|
* **/
|
const getToken = (): string => {
|
if (Session.get('token')) {
|
return 'Bearer '+ `${Session.get('token')}`
|
}
|
return ''
|
}
|
|
// 前置拦截器(发起请求之前的拦截)
|
instance.interceptors.request.use((config: AxiosRequestConfig) => {
|
config.headers && (config.headers['Authorization'] = getToken())
|
const controller = new AbortController()
|
config.signal = controller.signal
|
controllers.push(controller)
|
return config
|
})
|
|
// 后置拦截器(获取到响应时的拦截)
|
instance.interceptors.response.use(
|
(response: AxiosResponse) => {
|
const { data, status } = response
|
console.log(status)
|
const { message,code } = data
|
// 请求正常时,仅返回需要用到的 data 信息即可
|
if (code===200) return data.data
|
// 1、对于一些请求正常,但后台处理失败的内容进行拦截,返回对应错误信息
|
alert(message || '请求异常,请刷新重试')
|
return Promise.reject(data.data)
|
|
},
|
(error: AxiosError) => {
|
return error.response ? errorHandle(error) : Promise.reject(error)
|
}
|
)
|
|
export const cancelRequest = () => {
|
controllers.forEach(controller => {
|
controller.abort()
|
})
|
controllers = []
|
}
|
|
const ajaxGet = (url: string, params?: any): Promise<AxiosResponse> => instance.get(url, { params })
|
const ajaxDelete = (url: string, params?: any): Promise<AxiosResponse> => instance.delete(url, { params })
|
const ajaxPost = (url: string, params: any, config?: AxiosRequestConfig): Promise<AxiosResponse> => instance.post(url, params, config)
|
const ajaxPut = (url: string, params: any, config?: AxiosRequestConfig): Promise<AxiosResponse> => instance.put(url, params, config)
|
const ajaxPatch = (url: string, params: any, config?: AxiosRequestConfig): Promise<AxiosResponse> => instance.patch(url, params, config)
|
|
|
export {
|
ajaxGet,
|
ajaxDelete,
|
ajaxPost,
|
ajaxPut,
|
ajaxPatch
|
}
|