diff --git a/package.json b/package.json index eb64573..c33652d 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "access": "public" }, "peerDependencies": { - "@kevisual/query": "^0.0.12" + "@kevisual/query": "^0.0.14" }, "devDependencies": { "@types/node": "^22.13.11", diff --git a/src/query-login.ts b/src/query-login.ts index 828ce3d..2f93066 100644 --- a/src/query-login.ts +++ b/src/query-login.ts @@ -166,6 +166,50 @@ export class QueryLogin { } return response as any; } + /** + * 一个简单的401处理, 如果401,则刷新token, 如果refreshToken不存在,则返回401 + * refetch 是否重新请求, 会有bug,无限循环,按需要使用 + * @param response + * @param ctx + * @param opts + * @returns + */ + async run401Action( + response: Result, + ctx?: { req?: any; res?: any; fetch?: any }, + opts?: { + /** + * 是否重新请求, 会有bug,无限循环,按需要使用 + */ + refetch?: boolean; + /** + * check之后的回调 + */ + afterCheck?: (res: Result) => any; + /** + * 401处理后, 还是401, 则回调 + */ + afterAlso401?: (res: Result) => any; + }, + ) { + const that = this; + const refetch = opts?.refetch ?? false; + if (response?.code === 401) { + if (that.query.stop === true) { + return { code: 500, success: false, message: 'refresh token loading...' }; + } + that.query.stop = true; + const res = await that.afterCheck401ToRefreshToken(response, ctx, refetch); + that.query.stop = false; + opts?.afterCheck?.(res); + if (res.code === 401) { + opts?.afterAlso401?.(res); + } + return res; + } else { + return response as any; + } + } /** * 获取用户信息 * @param token