|
|
@@ -1,9 +1,10 @@
|
|
|
import { http } from '@kit.NetworkKit'
|
|
|
import { promptAction } from '@kit.ArkUI'
|
|
|
import { Rsp } from '../api/rsp/Rsp'
|
|
|
-
|
|
|
-// 传输参数token
|
|
|
-export const TOKEN_KEY: string = 'token'
|
|
|
+import { Storage } from './Storage'
|
|
|
+import { EventBus } from './EventBus'
|
|
|
+import { ReqApi } from '../api/req/ReqApi'
|
|
|
+import { Login } from '../api/rsp/Login'
|
|
|
|
|
|
// 请求网络的基址
|
|
|
// 外网IP "http://120.27.232.27:48080"
|
|
|
@@ -12,11 +13,19 @@ export const BASE_URL: string = 'http://120.27.232.27:48080'
|
|
|
|
|
|
interface EmptyInterface {}
|
|
|
|
|
|
-
|
|
|
-//Next版本不支持在箭头函数上写纯泛型,
|
|
|
-// function requestHttp(url: url地址, method: 请求方法类型,默认为get, data?: 参数类型) : 返回类型是: Promise里面的T类型的数据
|
|
|
-async function requestHttp<T>(url: string = '', method: http.RequestMethod = http.RequestMethod.GET,
|
|
|
- data?: object): Promise<Rsp<T>> {
|
|
|
+/**
|
|
|
+ * 执行网络请求
|
|
|
+ *
|
|
|
+ * @param url 请求地址
|
|
|
+ * @param method 请求方式
|
|
|
+ * @param data 携带的数据
|
|
|
+ * @param retryCount 尝试次数 默认一次
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+async function requestHttp<T>(url: string = '',
|
|
|
+ method: http.RequestMethod = http.RequestMethod.GET,
|
|
|
+ data?: object,
|
|
|
+ retryCount: number = 1): Promise<Rsp<T>> {
|
|
|
// 创建一个网络请求
|
|
|
const httpRequest = http.createHttp()
|
|
|
// 拼接地址
|
|
|
@@ -46,7 +55,7 @@ async function requestHttp<T>(url: string = '', method: http.RequestMethod = htt
|
|
|
// 请求头
|
|
|
header: {
|
|
|
'Content-Type': 'application/json',
|
|
|
- "Authorization": AppStorage.get(TOKEN_KEY) as string || '',
|
|
|
+ "Authorization": Storage.getToken(),
|
|
|
"tenant-id": "1" // 租户id
|
|
|
}
|
|
|
}
|
|
|
@@ -57,14 +66,8 @@ async function requestHttp<T>(url: string = '', method: http.RequestMethod = htt
|
|
|
console.log(method, '<---', reqUrl, res.responseCode, res.result)
|
|
|
// res.responseCode响应状态码,这里的401还会认为是请求成功
|
|
|
if (res.responseCode === 401) {
|
|
|
- // 401 token超时
|
|
|
- // 删除持久化数据token
|
|
|
- AppStorage.set<string>(TOKEN_KEY, '')
|
|
|
promptAction.openToast({ message: 'token timeout' }).catch()
|
|
|
- // 回登录
|
|
|
- // router.replaceUrl({ url: 'pages/Login/LoginPage' })
|
|
|
- // 返回错误 终止
|
|
|
- return Promise.reject(new Error('token timeout'))
|
|
|
+ return Promise.reject(new Error("token unused"))
|
|
|
} else if (res.responseCode === 404) {
|
|
|
promptAction.openToast({ message: 'not find' }).catch()
|
|
|
return Promise.reject(new Error('not find'))
|
|
|
@@ -74,6 +77,23 @@ async function requestHttp<T>(url: string = '', method: http.RequestMethod = htt
|
|
|
// 再判断返回的状态码进行处理,不是0,200都是失败
|
|
|
if ([0, 200].includes(apiRsp.code)) {
|
|
|
return apiRsp as Rsp<T>
|
|
|
+ } else if (apiRsp.code == 401) {
|
|
|
+ // 未登录,需要刷新token
|
|
|
+ const rtRsp = await ReqApi.refreshToken(Storage.getRefreshToken()).catch(() => {
|
|
|
+ const err = new Rsp<Login>()
|
|
|
+ err.code = 401
|
|
|
+ err.msg = "Login expired"
|
|
|
+ return err
|
|
|
+ })
|
|
|
+ if ([0, 200].includes(rtRsp.code)) {
|
|
|
+ Storage.setToken(rtRsp.data?.accessToken ?? "")
|
|
|
+ Storage.setRefreshToken(rtRsp.data?.refreshToken ?? "")
|
|
|
+ return requestHttp(url, method, data)
|
|
|
+ } else {
|
|
|
+ EventBus.emit("EVENT_LOGOUT")
|
|
|
+ promptAction.openToast({ message: apiRsp.msg }).catch()
|
|
|
+ return Promise.reject(new Error(apiRsp.msg))
|
|
|
+ }
|
|
|
} else {
|
|
|
promptAction.openToast({ message: apiRsp.msg }).catch()
|
|
|
return Promise.reject(new Error(apiRsp.msg))
|