zhangbo1_wd

刷新token逻辑调试;新增接口错误回调封装

1 export { ResponseDTO } from "./src/main/ets/bean/ResponseDTO" 1 export { ResponseDTO } from "./src/main/ets/bean/ResponseDTO"
2 2
  3 +export { ResposeError } from "./src/main/ets/bean/ResposeError"
  4 +
3 export { HttpRequest as WDHttp } from "./src/main/ets/http/HttpRequest" 5 export { HttpRequest as WDHttp } from "./src/main/ets/http/HttpRequest"
4 6
5 export { HttpUrlUtils } from "./src/main/ets/http/HttpUrlUtils" 7 export { HttpUrlUtils } from "./src/main/ets/http/HttpUrlUtils"
  1 +/**
  2 + * 接口返回错误数据封装
  3 + */
  4 +export class ResposeError {
  5 + code: number = -1;
  6 + message: string = '';
  7 +
  8 + static buildError(message: string, code?: number): ResposeError {
  9 + let error = new ResposeError()
  10 + error.message = message
  11 + if (code) {
  12 + error.code = code
  13 + }
  14 + return error;
  15 + }
  16 +}
@@ -6,6 +6,7 @@ import axios, { @@ -6,6 +6,7 @@ import axios, {
6 InternalAxiosRequestConfig 6 InternalAxiosRequestConfig
7 } from '@ohos/axios'; 7 } from '@ohos/axios';
8 import { Logger } from 'wdKit/Index'; 8 import { Logger } from 'wdKit/Index';
  9 +import { ResposeError } from '../bean/ResposeError';
9 10
10 // import type ResponseDTO from '../models/ResponseDTO'; 11 // import type ResponseDTO from '../models/ResponseDTO';
11 12
@@ -99,17 +100,16 @@ instance.interceptors.response.use(// 响应拦截器response类型就是Axios.r @@ -99,17 +100,16 @@ instance.interceptors.response.use(// 响应拦截器response类型就是Axios.r
99 }, 100 },
100 (error: AxiosError) => { 101 (error: AxiosError) => {
101 // 异常响应 102 // 异常响应
102 - // console.log('全局响应失败拦截')  
103 - // console.log(error.request)  
104 - // console.log(error.response) 103 + // 429-流量超标;403-临时token;406-token过期,强制下线
105 // 这里用来处理http常见错误,进行全局提示 104 // 这里用来处理http常见错误,进行全局提示
  105 + let errorBean = new ResposeError()
106 if (error != null && error.response != null) { 106 if (error != null && error.response != null) {
107 let message = buildErrorMsg(error.response.status); 107 let message = buildErrorMsg(error.response.status);
108 // 错误消息可以使用全局弹框展示出来 108 // 错误消息可以使用全局弹框展示出来
109 console.log(`httpStatus:${error.response?.status}-${message},请检查网络或联系管理员!`) 109 console.log(`httpStatus:${error.response?.status}-${message},请检查网络或联系管理员!`)
  110 + errorBean = buildError(error.response.status)
110 } 111 }
111 -  
112 - return Promise.reject(error); 112 + return Promise.reject(errorBean);
113 } 113 }
114 ); 114 );
115 115
@@ -161,3 +161,9 @@ function buildErrorMsg(httpStatus: number): string { @@ -161,3 +161,9 @@ function buildErrorMsg(httpStatus: number): string {
161 } 161 }
162 return message; 162 return message;
163 } 163 }
  164 +
  165 +function buildError(httpStatus: number): ResposeError {
  166 + let message = buildErrorMsg(httpStatus);
  167 + let error: ResposeError = ResposeError.buildError(message, httpStatus)
  168 + return error;
  169 +}
@@ -4,6 +4,7 @@ import HashMap from '@ohos.util.HashMap'; @@ -4,6 +4,7 @@ import HashMap from '@ohos.util.HashMap';
4 import { ResponseDTO } from '../bean/ResponseDTO'; 4 import { ResponseDTO } from '../bean/ResponseDTO';
5 import { HttpUrlUtils, WDHttp } from '../../../../Index'; 5 import { HttpUrlUtils, WDHttp } from '../../../../Index';
6 import { RefreshTokenRes } from '../bean/RefreshTokenRes'; 6 import { RefreshTokenRes } from '../bean/RefreshTokenRes';
  7 +import { ResposeError } from '../bean/ResposeError';
7 8
8 const TAG: string = 'HttpBizUtil' 9 const TAG: string = 'HttpBizUtil'
9 10
@@ -20,14 +21,12 @@ export class HttpBizUtil { @@ -20,14 +21,12 @@ export class HttpBizUtil {
20 * @returns 返回值 21 * @returns 返回值
21 */ 22 */
22 static get<T = ResponseDTO<string>>(url: string, headers?: HashMap<string, string>): Promise<T> { 23 static get<T = ResponseDTO<string>>(url: string, headers?: HashMap<string, string>): Promise<T> {
23 - return new Promise<T>((success, debug) => { 24 + return new Promise<T>((success, error) => {
24 WDHttp.get<T>(url, headers).then((originalRes: T) => { 25 WDHttp.get<T>(url, headers).then((originalRes: T) => {
25 - try {  
26 - let resDTO = originalRes as ResponseDTO  
27 - Logger.debug(TAG, 'get: ' + resDTO.code)  
28 - Logger.debug(TAG, 'get: ' + resDTO.message) 26 + success(originalRes)
  27 + }).catch((res: ResposeError) => {
29 // 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面 28 // 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面
30 - if (resDTO.code == 403 || resDTO.code == 406) { 29 + if (res.code == 403 || res.code == 406) {
31 HttpBizUtil.refreshToken().then((token: string) => { 30 HttpBizUtil.refreshToken().then((token: string) => {
32 if (headers) { 31 if (headers) {
33 headers.replace('RMRB-X-TOKEN', token) 32 headers.replace('RMRB-X-TOKEN', token)
@@ -39,18 +38,14 @@ export class HttpBizUtil { @@ -39,18 +38,14 @@ export class HttpBizUtil {
39 Logger.debug(TAG, 'get again: ' + againResDTO) 38 Logger.debug(TAG, 'get again: ' + againResDTO)
40 success(againResDTO) 39 success(againResDTO)
41 }).catch((res: object) => { 40 }).catch((res: object) => {
42 - debug(res) 41 + error(ResposeError.buildError(JSON.stringify(res)))
43 }) 42 })
44 }); 43 });
45 } else { 44 } else {
46 - success(originalRes)  
47 - }  
48 - } catch (e) {  
49 - debug(originalRes) 45 + // 非403、406,直接抛出去
  46 + Logger.debug(TAG, 'get else: ' + JSON.stringify(res))
  47 + error(res)
50 } 48 }
51 -  
52 - }).catch((res: object) => {  
53 - debug(res)  
54 }) 49 })
55 }) 50 })
56 } 51 }
@@ -63,34 +58,31 @@ export class HttpBizUtil { @@ -63,34 +58,31 @@ export class HttpBizUtil {
63 * @returns 返回值 58 * @returns 返回值
64 */ 59 */
65 static post<T = ResponseDTO<string>>(url: string, data?: object, headers?: HashMap<string, string>): Promise<T> { 60 static post<T = ResponseDTO<string>>(url: string, data?: object, headers?: HashMap<string, string>): Promise<T> {
66 - return new Promise<T>((success, debug) => { 61 + return new Promise<T>((success, error) => {
67 WDHttp.post<T>(url, data, headers).then((originalRes: T) => { 62 WDHttp.post<T>(url, data, headers).then((originalRes: T) => {
68 - try {  
69 - let resDTO = originalRes as ResponseDTO  
70 - Logger.debug(TAG, 'post: ' + resDTO.code)  
71 - Logger.debug(TAG, 'post: ' + resDTO.message) 63 + success(originalRes)
  64 + }).catch((res: ResposeError) => {
72 // 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面 65 // 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面
73 - if (resDTO.code == 403 || resDTO.code == 406) { 66 + Logger.debug(TAG, 'post catch error: ' + JSON.stringify(res))
  67 + if (res.code == 403 || res.code == 406) {
74 HttpBizUtil.refreshToken().then((token: string) => { 68 HttpBizUtil.refreshToken().then((token: string) => {
75 if (headers) { 69 if (headers) {
76 headers.replace('RMRB-X-TOKEN', token) 70 headers.replace('RMRB-X-TOKEN', token)
77 headers.replace('cookie', 'RMRB-X-TOKEN=' + token) 71 headers.replace('cookie', 'RMRB-X-TOKEN=' + token)
78 } 72 }
  73 + Logger.debug(TAG, 'post again send: ' + token)
79 // refreshToken为空场景不处理,直接请求接口。 74 // refreshToken为空场景不处理,直接请求接口。
80 - WDHttp.post<T>(url, headers).then((againResDTO: T) => { 75 + WDHttp.post<T>(url, data, headers).then((againResDTO: T) => {
  76 + Logger.debug(TAG, 'post again success: ' + JSON.stringify(againResDTO))
81 success(againResDTO) 77 success(againResDTO)
82 }).catch((res: object) => { 78 }).catch((res: object) => {
83 - debug(res) 79 + error(ResposeError.buildError(JSON.stringify(res)))
84 }) 80 })
85 }); 81 });
86 } else { 82 } else {
87 - success(originalRes) 83 + // 非403、406,直接抛出去
  84 + error(res)
88 } 85 }
89 - } catch (e) {  
90 - success(originalRes)  
91 - }  
92 - }).catch((res: object) => {  
93 - debug(res)  
94 }) 86 })
95 }) 87 })
96 } 88 }
@@ -104,9 +96,9 @@ export class HttpBizUtil { @@ -104,9 +96,9 @@ export class HttpBizUtil {
104 params.set('refreshToken', HttpUrlUtils.getRefreshToken()) 96 params.set('refreshToken', HttpUrlUtils.getRefreshToken())
105 params.set('deviceId', HttpUrlUtils.getDeviceId()) 97 params.set('deviceId', HttpUrlUtils.getDeviceId())
106 let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders(); 98 let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
107 - Logger.debug(TAG, 'refreshToken getRefreshToken: ' + HttpUrlUtils.getRefreshToken())  
108 - // // 请求刷新token接口  
109 - return new Promise<string>((success, debug) => { 99 + // Logger.debug(TAG, 'refreshToken getRefreshToken: ' + HttpUrlUtils.getRefreshToken())
  100 + // 请求刷新token接口
  101 + return new Promise<string>((success, error) => {
110 WDHttp.post<ResponseDTO<RefreshTokenRes>>(url, params, headers).then((resDTO: ResponseDTO<RefreshTokenRes>) => { 102 WDHttp.post<ResponseDTO<RefreshTokenRes>>(url, params, headers).then((resDTO: ResponseDTO<RefreshTokenRes>) => {
111 let newToken = '' 103 let newToken = ''
112 if (resDTO) { 104 if (resDTO) {
@@ -126,6 +118,7 @@ export class HttpBizUtil { @@ -126,6 +118,7 @@ export class HttpBizUtil {
126 Logger.debug(TAG, 'refreshToken refreshToken: ' + resDTO.data.refreshToken) 118 Logger.debug(TAG, 'refreshToken refreshToken: ' + resDTO.data.refreshToken)
127 } 119 }
128 } 120 }
  121 + Logger.debug(TAG, 'refreshToken last jwtToken: ' + newToken)
129 success(newToken) 122 success(newToken)
130 }); 123 });
131 }) 124 })