48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
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';
|
|
}
|
|
}
|