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 };