import { createAlova } from 'alova'; import adapterFetch from 'alova/fetch'; import { message, UseAuthStore } from '@/plugin'; export * from './type'; export const alovaInstance = createAlova({ requestAdapter: adapterFetch(), cacheFor: { expire: 0 }, responded: async (response) => { const text = await response.text(); const data = { response: () => response, text: () => text, json: () => JSON.parse(text), headers: () => { const headers: { [key: string]: string } = {}; response.headers.forEach((k, v) => { headers[k] = v; }); return headers; }, }; if (response.status !== 200) { const messages = JSON.parse(text).message; if (response.status === 500) message.error(messages); throw new RequestError(data, messages); } return data; }, beforeRequest(method) { const useAuthStore = UseAuthStore(); if (useAuthStore.isLogin) { method.config.headers.Authorization = `Bearer ${useAuthStore.token}`; } }, }); export class RequestError extends Error { public data: any; constructor(data: any, message: string) { super(message); this.data = data; this.name = 'RequestError'; } }