zhangbo1_wd

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

export { ResponseDTO } from "./src/main/ets/bean/ResponseDTO"
export { ResposeError } from "./src/main/ets/bean/ResposeError"
export { HttpRequest as WDHttp } from "./src/main/ets/http/HttpRequest"
export { HttpUrlUtils } from "./src/main/ets/http/HttpUrlUtils"
... ...
/**
* 接口返回错误数据封装
*/
export class ResposeError {
code: number = -1;
message: string = '';
static buildError(message: string, code?: number): ResposeError {
let error = new ResposeError()
error.message = message
if (code) {
error.code = code
}
return error;
}
}
\ No newline at end of file
... ...
... ... @@ -6,6 +6,7 @@ import axios, {
InternalAxiosRequestConfig
} from '@ohos/axios';
import { Logger } from 'wdKit/Index';
import { ResposeError } from '../bean/ResposeError';
// import type ResponseDTO from '../models/ResponseDTO';
... ... @@ -99,17 +100,16 @@ instance.interceptors.response.use(// 响应拦截器response类型就是Axios.r
},
(error: AxiosError) => {
// 异常响应
// console.log('全局响应失败拦截')
// console.log(error.request)
// console.log(error.response)
// 429-流量超标;403-临时token;406-token过期,强制下线
// 这里用来处理http常见错误,进行全局提示
let errorBean = new ResposeError()
if (error != null && error.response != null) {
let message = buildErrorMsg(error.response.status);
// 错误消息可以使用全局弹框展示出来
console.log(`httpStatus:${error.response?.status}-${message},请检查网络或联系管理员!`)
errorBean = buildError(error.response.status)
}
return Promise.reject(error);
return Promise.reject(errorBean);
}
);
... ... @@ -161,3 +161,9 @@ function buildErrorMsg(httpStatus: number): string {
}
return message;
}
function buildError(httpStatus: number): ResposeError {
let message = buildErrorMsg(httpStatus);
let error: ResposeError = ResposeError.buildError(message, httpStatus)
return error;
}
... ...
... ... @@ -4,6 +4,7 @@ import HashMap from '@ohos.util.HashMap';
import { ResponseDTO } from '../bean/ResponseDTO';
import { HttpUrlUtils, WDHttp } from '../../../../Index';
import { RefreshTokenRes } from '../bean/RefreshTokenRes';
import { ResposeError } from '../bean/ResposeError';
const TAG: string = 'HttpBizUtil'
... ... @@ -20,37 +21,31 @@ export class HttpBizUtil {
* @returns 返回值
*/
static get<T = ResponseDTO<string>>(url: string, headers?: HashMap<string, string>): Promise<T> {
return new Promise<T>((success, debug) => {
return new Promise<T>((success, error) => {
WDHttp.get<T>(url, headers).then((originalRes: T) => {
try {
let resDTO = originalRes as ResponseDTO
Logger.debug(TAG, 'get: ' + resDTO.code)
Logger.debug(TAG, 'get: ' + resDTO.message)
// 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面
if (resDTO.code == 403 || resDTO.code == 406) {
HttpBizUtil.refreshToken().then((token: string) => {
if (headers) {
headers.replace('RMRB-X-TOKEN', token)
headers.replace('cookie', 'RMRB-X-TOKEN=' + token)
}
Logger.debug(TAG, 'get again send: ' + token)
// refreshToken为空场景不处理,直接请求接口。
WDHttp.get<T>(url, headers).then((againResDTO: T) => {
Logger.debug(TAG, 'get again: ' + againResDTO)
success(againResDTO)
}).catch((res: object) => {
debug(res)
})
});
} else {
success(originalRes)
}
} catch (e) {
debug(originalRes)
success(originalRes)
}).catch((res: ResposeError) => {
// 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面
if (res.code == 403 || res.code == 406) {
HttpBizUtil.refreshToken().then((token: string) => {
if (headers) {
headers.replace('RMRB-X-TOKEN', token)
headers.replace('cookie', 'RMRB-X-TOKEN=' + token)
}
Logger.debug(TAG, 'get again send: ' + token)
// refreshToken为空场景不处理,直接请求接口。
WDHttp.get<T>(url, headers).then((againResDTO: T) => {
Logger.debug(TAG, 'get again: ' + againResDTO)
success(againResDTO)
}).catch((res: object) => {
error(ResposeError.buildError(JSON.stringify(res)))
})
});
} else {
// 非403、406,直接抛出去
Logger.debug(TAG, 'get else: ' + JSON.stringify(res))
error(res)
}
}).catch((res: object) => {
debug(res)
})
})
}
... ... @@ -63,34 +58,31 @@ export class HttpBizUtil {
* @returns 返回值
*/
static post<T = ResponseDTO<string>>(url: string, data?: object, headers?: HashMap<string, string>): Promise<T> {
return new Promise<T>((success, debug) => {
return new Promise<T>((success, error) => {
WDHttp.post<T>(url, data, headers).then((originalRes: T) => {
try {
let resDTO = originalRes as ResponseDTO
Logger.debug(TAG, 'post: ' + resDTO.code)
Logger.debug(TAG, 'post: ' + resDTO.message)
// 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面
if (resDTO.code == 403 || resDTO.code == 406) {
HttpBizUtil.refreshToken().then((token: string) => {
if (headers) {
headers.replace('RMRB-X-TOKEN', token)
headers.replace('cookie', 'RMRB-X-TOKEN=' + token)
}
// refreshToken为空场景不处理,直接请求接口。
WDHttp.post<T>(url, headers).then((againResDTO: T) => {
success(againResDTO)
}).catch((res: object) => {
debug(res)
})
});
} else {
success(originalRes)
}
} catch (e) {
success(originalRes)
success(originalRes)
}).catch((res: ResposeError) => {
// 403:临时token;406:强制下线、封禁、清空登录信息还要跳转登录页面
Logger.debug(TAG, 'post catch error: ' + JSON.stringify(res))
if (res.code == 403 || res.code == 406) {
HttpBizUtil.refreshToken().then((token: string) => {
if (headers) {
headers.replace('RMRB-X-TOKEN', token)
headers.replace('cookie', 'RMRB-X-TOKEN=' + token)
}
Logger.debug(TAG, 'post again send: ' + token)
// refreshToken为空场景不处理,直接请求接口。
WDHttp.post<T>(url, data, headers).then((againResDTO: T) => {
Logger.debug(TAG, 'post again success: ' + JSON.stringify(againResDTO))
success(againResDTO)
}).catch((res: object) => {
error(ResposeError.buildError(JSON.stringify(res)))
})
});
} else {
// 非403、406,直接抛出去
error(res)
}
}).catch((res: object) => {
debug(res)
})
})
}
... ... @@ -104,9 +96,9 @@ export class HttpBizUtil {
params.set('refreshToken', HttpUrlUtils.getRefreshToken())
params.set('deviceId', HttpUrlUtils.getDeviceId())
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
Logger.debug(TAG, 'refreshToken getRefreshToken: ' + HttpUrlUtils.getRefreshToken())
// // 请求刷新token接口
return new Promise<string>((success, debug) => {
// Logger.debug(TAG, 'refreshToken getRefreshToken: ' + HttpUrlUtils.getRefreshToken())
// 请求刷新token接口
return new Promise<string>((success, error) => {
WDHttp.post<ResponseDTO<RefreshTokenRes>>(url, params, headers).then((resDTO: ResponseDTO<RefreshTokenRes>) => {
let newToken = ''
if (resDTO) {
... ... @@ -126,6 +118,7 @@ export class HttpBizUtil {
Logger.debug(TAG, 'refreshToken refreshToken: ' + resDTO.data.refreshToken)
}
}
Logger.debug(TAG, 'refreshToken last jwtToken: ' + newToken)
success(newToken)
});
})
... ...