From 7e4fa7d43d84b4faea0fca20ed6dc5e20637aa0e Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期一, 20 十月 2025 16:36:01 +0800
Subject: [PATCH] fix: bug
---
apps/bMiniApp/src/utils/request/index.ts | 105 ++++++++++++++++++++++++++++++++--------------------
1 files changed, 65 insertions(+), 40 deletions(-)
diff --git a/apps/bMiniApp/src/utils/request/index.ts b/apps/bMiniApp/src/utils/request/index.ts
index 0693296..2ebbed6 100644
--- a/apps/bMiniApp/src/utils/request/index.ts
+++ b/apps/bMiniApp/src/utils/request/index.ts
@@ -3,14 +3,14 @@
import qs from 'qs';
import Taro from '@tarojs/taro';
import { getToken } from '@/utils';
-import { tokenIsExpired, Message, SensitiveManage } from '@12333/utils';
-import * as accountServices from '@12333/services/api/Account';
+import { tokenIsExpired, Message, SensitiveManage, httpLoggerRecord } from '@12333/utils';
import { useUserStoreWithOut } from '@/stores/modules/user';
const RefreshTokenUrl = '/gettokenbyrefreshtoken';
/** 璇锋眰鐧藉悕鍗曪紝鏀剧疆涓�浜涗笉闇�瑕乼oken鐨勬帴鍙o紙閫氳繃璁剧疆璇锋眰鐧藉悕鍗曪紝闃叉token杩囨湡鍚庡啀璇锋眰閫犳垚鐨勬寰幆闂锛� */
const whiteList = [RefreshTokenUrl];
+const RefreshTokenBlackList = ['wxmpLogin'];
export function startLoading(showNavigationBarLoading: boolean) {
if (showNavigationBarLoading) {
@@ -51,14 +51,19 @@
success: boolean;
data: any;
/**
+ * http鐘舵�佸悧
+ */
+ code?: number;
+ /**
* 閿欒鐮�
*/
- error?: number;
+ errorCode?: string;
/**
* 閿欒淇℃伅
*/
msg?: string;
showType?: ErrorShowType;
+ traceId?: string;
}
interface ErrorResponse {
@@ -99,6 +104,19 @@
// 閿欒鎺ユ敹鍙婂鐞�
errorHandler: (error, opts) => {
console.log('error: ', error);
+
+ const url = opts.url ?? '';
+ httpLoggerRecord.error({
+ message: `[${url}] 璇锋眰閿欒`,
+ httpParams: {
+ url: url,
+ //@ts-ignore
+ traceId: error?.info?.traceId,
+ stackTrace: error.stack,
+ },
+ args: [{ data: opts.data, params: opts.params, headers: opts.headers }],
+ });
+
if (opts?.skipErrorHandler) throw error;
if (opts?.customErrorHandler) {
@@ -112,6 +130,9 @@
const errorInfo: ErrorInfo | undefined = (error as any).info;
if (errorInfo) {
const { errorMessage, errorCode } = errorInfo;
+ if (Number(errorCode) === 401) {
+ handleLogout();
+ }
switch (errorInfo.showType) {
case ErrorShowType.SILENT:
// do nothing
@@ -135,7 +156,7 @@
} else if ((error as AxiosError<ResponseStructure, IRequestOptions>).response) {
// Axios 鐨勯敊璇�
// 璇锋眰鎴愬姛鍙戝嚭涓旀湇鍔″櫒涔熷搷搴斾簡鐘舵�佺爜锛屼絾鐘舵�佷唬鐮佽秴鍑轰簡 2xx 鐨勮寖鍥�
- handleAxiosResponseError(error as AxiosError<ErrorResponse, IRequestOptions>);
+ handleAxiosResponseError(error as AxiosError<ResponseStructure, IRequestOptions>);
// Message.errorMessage(`Response status:${(error as AxiosError).response.status}`);
} else if ((error as AxiosError).request) {
// 璇锋眰宸茬粡鎴愬姛鍙戣捣锛屼絾娌℃湁鏀跺埌鍝嶅簲
@@ -150,7 +171,7 @@
// 閿欒鎶涘嚭
errorThrower: (res) => {
- const { success, data, error: errorCode, msg, showType } = res;
+ const { success, data, errorCode, msg, showType } = res;
if (!success) {
const error: any = new Error(msg);
error.name = 'BizError';
@@ -164,6 +185,14 @@
[
(config) => {
const $config = config;
+
+ httpLoggerRecord.info({
+ message: `[${$config.url}] 璇锋眰寮�濮媊,
+ httpParams: {
+ url: $config.url,
+ },
+ args: [{ data: $config.data, params: $config.params, headers: $config.headers }],
+ });
const token = getToken();
@@ -190,34 +219,9 @@
return new Promise((resolve, reject) => {
if (userInfo && token && $config.withCredentials) {
- if (tokenIsExpired(userInfo)) {
- if (!Request.refreshTokenPending) {
- Request.refreshTokenPending = true;
- // token杩囨湡鍒锋柊
- useUserStoreWithOut()
- .getTokenByRefreshToken({
- refreshToken: userInfo.refreshToken,
- clientId: userStore.accountInfo?.client_id,
- })
- .then((res) => {
- $config.headers['Authorization'] = 'Bearer ' + res.accessToken;
- Request.requests.forEach((cb) => cb(res.accessToken));
- Request.requests = [];
- })
- .catch((err) => {
- Request.requests.forEach((cb) => cb());
- Request.requests = [];
- reject(err);
- })
- .finally(() => {
- Request.refreshTokenPending = false;
- });
- }
- resolve(Request.retryOriginalRequest($config));
- } else {
- $config.headers['Authorization'] = 'Bearer ' + token;
- resolve($config);
- }
+ $config.headers['Authorization'] = 'Bearer ' + userInfo.accessToken;
+ $config.headers['X-Authorization'] = 'Bearer ' + userInfo.refreshToken;
+ resolve($config);
} else {
resolve($config);
}
@@ -234,13 +238,34 @@
(response) => {
const $config = response.config as IRequestOptions;
+ httpLoggerRecord.info({
+ message: `[${$config.url}] 璇锋眰缁撴潫`,
+ httpParams: {
+ url: $config.url,
+ traceId: response.data?.traceId,
+ },
+ args: [{ data: $config.data, params: $config.params, headers: $config.headers }],
+ });
+
const { needNProcess, getResponse = false } = $config;
+
+ const userStore = useUserStoreWithOut();
+
+ if (
+ response.headers['x-access-token'] &&
+ RefreshTokenBlackList.every((url) => !response.config.url?.includes(url))
+ ) {
+ const tokenInfo: API.LoginCommandCallback = {
+ accessToken: response.headers['access-token'],
+ refreshToken: response.headers['x-access-token'],
+ };
+ userStore.setTokenAction(tokenInfo);
+ userStore.setUserInfoAction(tokenInfo);
+ }
endLoading();
- return getResponse
- ? response
- : SensitiveManage.filterSensitiveWord((response.data as any).result);
+ return getResponse ? response : SensitiveManage.filterSensitiveWord(response.data.data);
},
(error) => {
endLoading();
@@ -264,17 +289,17 @@
[505]: 'HTTP鐗堟湰涓嶅彈鏀寔',
};
-function handleAxiosResponseError(error: AxiosError<ErrorResponse, IRequestOptions>) {
+function handleAxiosResponseError(error: AxiosError<ResponseStructure, IRequestOptions>) {
if (error.response.config.url.toLowerCase().includes(RefreshTokenUrl.toLowerCase())) {
handleLogout();
return;
}
if (error && error.response) {
let message = ErrorMessageMap[error.response?.status] ?? '璇锋眰閿欒';
- if (error.response.data?.error?.message) {
- message = error.response.data?.error?.message;
+ if (error.response.data?.msg) {
+ message = error.response.data?.msg;
}
- if (error.response?.status === 401) {
+ if (error.response?.status === 401 || error.response.data.code === 401) {
handleLogout();
}
--
Gitblit v1.9.1