🐛 fix i18n init bug
This commit is contained in:
@@ -2,13 +2,46 @@ import {createAlova} from 'alova';
|
||||
|
||||
import VueHook from 'alova/vue';
|
||||
import useStore from "@/store";
|
||||
import {axiosRequestAdapter} from "@alova/adapter-axios";
|
||||
import {AxiosError, AxiosResponse} from "axios";
|
||||
import {message} from "ant-design-vue";
|
||||
import {localforageStorageAdapter} from "@/utils/alova/adapter/localforageStorageAdapter.ts";
|
||||
import {createServerTokenAuthentication} from "alova/client";
|
||||
import {AxiosError, AxiosResponse} from "axios";
|
||||
import {handleCode} from "@/utils/errorCode/errorCodeHandler.ts";
|
||||
import {message} from "ant-design-vue";
|
||||
import i18n from "@/locales";
|
||||
import {axiosRequestAdapter} from "@alova/adapter-axios";
|
||||
import {refreshToken} from "@/api/user";
|
||||
import router from "@/router/router.ts";
|
||||
|
||||
const {onAuthRequired, onResponseRefreshToken} = createServerTokenAuthentication<typeof VueHook,
|
||||
typeof axiosRequestAdapter>({
|
||||
refreshTokenOnSuccess: {
|
||||
// 在请求前触发,将接收到method参数,并返回boolean表示token是否过期
|
||||
isExpired: (response: AxiosResponse<any, any>, _method: any) => {
|
||||
return response.data.code === 401;
|
||||
},
|
||||
|
||||
// 当token过期时触发,在此函数中触发刷新token
|
||||
handler: async () => {
|
||||
try {
|
||||
const user = useStore().user;
|
||||
const res: any = await refreshToken(user.getUser()?.refreshToken || '');
|
||||
if (res.code === 0 && res.data) {
|
||||
user.setUser({
|
||||
userId: res.data.userId,
|
||||
accessToken: res.data.access_token,
|
||||
refreshToken: res.data.refresh_token,
|
||||
expiresAt: res.data.expires_at,
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
// token刷新失败,跳转回登录页
|
||||
message.error(i18n.global.t('error.authTokenError')).then();
|
||||
await router.push('/login');
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
export const service = createAlova({
|
||||
timeout: 5000,
|
||||
baseURL: import.meta.env.VITE_APP_BASE_API,
|
||||
@@ -16,43 +49,38 @@ export const service = createAlova({
|
||||
// 请求适配器
|
||||
requestAdapter: axiosRequestAdapter(),
|
||||
l2Cache: localforageStorageAdapter,
|
||||
cacheFor: {
|
||||
// GET: {
|
||||
// mode: 'restore',
|
||||
// expire: 10 * 1000
|
||||
// },
|
||||
},
|
||||
cacheLogger: import.meta.env.VITE_NODE_ENV === 'development',
|
||||
cacheFor: {},
|
||||
// 设置全局的请求拦截器
|
||||
beforeRequest(method) {
|
||||
beforeRequest: onAuthRequired(async (method: any) => {
|
||||
if (!method.meta?.ignoreToken) {
|
||||
const user = useStore().user;
|
||||
method.config.headers.token = user.getUser()?.token;
|
||||
method.config.headers.Authorization = `${import.meta.env.VITE_APP_TOKEN_KEY} ${user.getUser()?.accessToken}`;
|
||||
}
|
||||
const lang = useStore().lang;
|
||||
method.config.headers['Accept-Language'] = lang.getLang();
|
||||
|
||||
},
|
||||
method.config.headers['Accept-Language'] = lang.lang|| 'zh';
|
||||
}),
|
||||
// 响应拦截器
|
||||
responded: {
|
||||
onSuccess: async (response: AxiosResponse) => {
|
||||
responded: onResponseRefreshToken({
|
||||
onSuccess: async (response: AxiosResponse, _method: any) => {
|
||||
if (response.data instanceof Blob) {
|
||||
return response;
|
||||
} else {
|
||||
return response.data;
|
||||
}
|
||||
},
|
||||
onError(error: AxiosError) {
|
||||
const {response} = error;
|
||||
if (response) {
|
||||
handleCode(response.status);
|
||||
}
|
||||
if (!window.navigator.onLine) {
|
||||
message.error(i18n.global.t('error.networkError')).then();
|
||||
return Promise.reject(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
onError:
|
||||
(error: AxiosError, _method: any) => {
|
||||
const {response} = error;
|
||||
if (response) {
|
||||
handleCode(response.status);
|
||||
}
|
||||
if (!window.navigator.onLine) {
|
||||
message.error(i18n.global.t('error.networkError')).then();
|
||||
return Promise.reject(error);
|
||||
}
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user