Showing
4 changed files
with
80 additions
and
63 deletions
| 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,37 +21,31 @@ export class HttpBizUtil { | @@ -20,37 +21,31 @@ 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) | ||
| 29 | - // 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面 | ||
| 30 | - if (resDTO.code == 403 || resDTO.code == 406) { | ||
| 31 | - HttpBizUtil.refreshToken().then((token: string) => { | ||
| 32 | - if (headers) { | ||
| 33 | - headers.replace('RMRB-X-TOKEN', token) | ||
| 34 | - headers.replace('cookie', 'RMRB-X-TOKEN=' + token) | ||
| 35 | - } | ||
| 36 | - Logger.debug(TAG, 'get again send: ' + token) | ||
| 37 | - // refreshToken为空场景不处理,直接请求接口。 | ||
| 38 | - WDHttp.get<T>(url, headers).then((againResDTO: T) => { | ||
| 39 | - Logger.debug(TAG, 'get again: ' + againResDTO) | ||
| 40 | - success(againResDTO) | ||
| 41 | - }).catch((res: object) => { | ||
| 42 | - debug(res) | ||
| 43 | - }) | ||
| 44 | - }); | ||
| 45 | - } else { | ||
| 46 | - success(originalRes) | ||
| 47 | - } | ||
| 48 | - } catch (e) { | ||
| 49 | - debug(originalRes) | 26 | + success(originalRes) |
| 27 | + }).catch((res: ResposeError) => { | ||
| 28 | + // 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面 | ||
| 29 | + if (res.code == 403 || res.code == 406) { | ||
| 30 | + HttpBizUtil.refreshToken().then((token: string) => { | ||
| 31 | + if (headers) { | ||
| 32 | + headers.replace('RMRB-X-TOKEN', token) | ||
| 33 | + headers.replace('cookie', 'RMRB-X-TOKEN=' + token) | ||
| 34 | + } | ||
| 35 | + Logger.debug(TAG, 'get again send: ' + token) | ||
| 36 | + // refreshToken为空场景不处理,直接请求接口。 | ||
| 37 | + WDHttp.get<T>(url, headers).then((againResDTO: T) => { | ||
| 38 | + Logger.debug(TAG, 'get again: ' + againResDTO) | ||
| 39 | + success(againResDTO) | ||
| 40 | + }).catch((res: object) => { | ||
| 41 | + error(ResposeError.buildError(JSON.stringify(res))) | ||
| 42 | + }) | ||
| 43 | + }); | ||
| 44 | + } else { | ||
| 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) | ||
| 72 | - // 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面 | ||
| 73 | - if (resDTO.code == 403 || resDTO.code == 406) { | ||
| 74 | - HttpBizUtil.refreshToken().then((token: string) => { | ||
| 75 | - if (headers) { | ||
| 76 | - headers.replace('RMRB-X-TOKEN', token) | ||
| 77 | - headers.replace('cookie', 'RMRB-X-TOKEN=' + token) | ||
| 78 | - } | ||
| 79 | - // refreshToken为空场景不处理,直接请求接口。 | ||
| 80 | - WDHttp.post<T>(url, headers).then((againResDTO: T) => { | ||
| 81 | - success(againResDTO) | ||
| 82 | - }).catch((res: object) => { | ||
| 83 | - debug(res) | ||
| 84 | - }) | ||
| 85 | - }); | ||
| 86 | - } else { | ||
| 87 | - success(originalRes) | ||
| 88 | - } | ||
| 89 | - } catch (e) { | ||
| 90 | - success(originalRes) | 63 | + success(originalRes) |
| 64 | + }).catch((res: ResposeError) => { | ||
| 65 | + // 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面 | ||
| 66 | + Logger.debug(TAG, 'post catch error: ' + JSON.stringify(res)) | ||
| 67 | + if (res.code == 403 || res.code == 406) { | ||
| 68 | + HttpBizUtil.refreshToken().then((token: string) => { | ||
| 69 | + if (headers) { | ||
| 70 | + headers.replace('RMRB-X-TOKEN', token) | ||
| 71 | + headers.replace('cookie', 'RMRB-X-TOKEN=' + token) | ||
| 72 | + } | ||
| 73 | + Logger.debug(TAG, 'post again send: ' + token) | ||
| 74 | + // refreshToken为空场景不处理,直接请求接口。 | ||
| 75 | + WDHttp.post<T>(url, data, headers).then((againResDTO: T) => { | ||
| 76 | + Logger.debug(TAG, 'post again success: ' + JSON.stringify(againResDTO)) | ||
| 77 | + success(againResDTO) | ||
| 78 | + }).catch((res: object) => { | ||
| 79 | + error(ResposeError.buildError(JSON.stringify(res))) | ||
| 80 | + }) | ||
| 81 | + }); | ||
| 82 | + } else { | ||
| 83 | + // 非403、406,直接抛出去 | ||
| 84 | + error(res) | ||
| 91 | } | 85 | } |
| 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 | }) |
-
Please register or login to post a comment