50 lines
1.1 KiB
TypeScript
50 lines
1.1 KiB
TypeScript
import axios from "axios";
|
|
import { Response } from "~/types/Model";
|
|
|
|
export type ErrorCallback = (response: Response) => void;
|
|
|
|
let globalErrorCallback: ErrorCallback | null = null;
|
|
|
|
export const setGlobalErrorCallback = (callback: ErrorCallback) => {
|
|
globalErrorCallback = callback;
|
|
};
|
|
|
|
axios.defaults.withCredentials = true;
|
|
axios.interceptors.response.use((axiosResp: any) => {
|
|
if (!axiosResp.config.responseType) {
|
|
// 服务端返回
|
|
const serverResp = axiosResp.data as Response;
|
|
if (serverResp.code < 40000) {
|
|
// 200 或 300 HTTP 状态段视为成功
|
|
return serverResp.data;
|
|
} else {
|
|
if (globalErrorCallback) {
|
|
globalErrorCallback(serverResp);
|
|
}
|
|
// 由调用方处理
|
|
return Promise.reject(serverResp.msg);
|
|
}
|
|
}
|
|
return axiosResp.data;
|
|
}, (error: any) => {
|
|
// 请求错误
|
|
if (error) {
|
|
if (error.response && error.response.status) {
|
|
throw error;
|
|
}
|
|
if (error.request) {
|
|
if (error.message.startsWith("timeout")) {
|
|
throw new Error("time out");
|
|
} else {
|
|
throw new Error(error.message);
|
|
}
|
|
}
|
|
}
|
|
throw error;
|
|
});
|
|
|
|
export default {
|
|
axios,
|
|
setGlobalErrorCallback
|
|
};
|