import { UserSettingClass } from '.'
import { BASE_URL, TOKEN_KEY } from '../constants'
import { promptAction, router } from '@kit.ArkUI'
import { ResponseData } from '../models'
import { http } from '@kit.NetworkKit'
// 任何对象都可以as object
export async function requestHttp<T>(url: string, method: http.RequestMethod = http.RequestMethod.GET,
data?: object) {
const req = http.createHttp()
let urlStr = BASE_URL + url // 拼接url
// 处理get请求的参数
if (method === http.RequestMethod.GET) {
if (data) {
const paramsStr = Object.keys(data).map(key => `${key}=${data[key]}`).join('&')
urlStr += `?${paramsStr}` // get请求时拼接参数到查询参数上 ?a=1&b=2&c=3
}
}
// 组装参数
let config: http.HttpRequestOptions = {
method: method,
extraData: method !== http.RequestMethod.GET ? data : '', // 非get请求不传data
header: {
ContentType: 'application/json',
Authorization: AppStorage.get(TOKEN_KEY),
},
readTimeout: 10000, // 如果多少秒没响应就断开
expectDataType: http.HttpDataType.OBJECT // 自动将res.result转换为对象
}
try {
const res = await req.request(urlStr, config)
console.info('res123', 'requestHttp res:' + JSON.stringify(res))
if (res.responseCode === 401) {
promptAction.showToast({ message: '登录失效' })
// 删除token - 删两个地址 首选项- 全局状态
// new UserSettingClass(getContext()).setToken("") // 清空首选项token
UserSettingClass.setToken('')
AppStorage.set(TOKEN_KEY, "") // 只能设置 不能删除
router.replaceUrl({
url: 'pages/login/Login' // 跳转到登录页
})
return Promise.reject(new Error("登录失效"))
}
if (res.responseCode === 404) {
promptAction.showToast({ message: '请求地址错误' })
return Promise.reject(new Error("请求地址错误"))
}
const result = res.result as ResponseData<T>
if (result.code === 200) {
return result.data
} else {
promptAction.showToast({ message: "接口请求错误" }) // res.msg没处理好 有可能出来一堆服务器语言
console.error(' 接口请求错误-----> ', JSON.stringify(result))
return Promise.reject(JSON.stringify(result)) // 业务错误 请求终止
}
} catch (err) {
console.error('err -----> ', err)
return Promise.reject(err)
}
}
export class Request {
static get<T = null>(url: string, data?: object): Promise<T> {
return requestHttp<T>(url, http.RequestMethod.GET, data)
}
static post<T = null>(url: string, data?: object): Promise<T> {
return requestHttp<T>(url, http.RequestMethod.POST, data)
}
static delete<T = null>(url: string, data?: object): Promise<T> {
return requestHttp<T>(url, http.RequestMethod.DELETE, data)
}
static put<T = null>(url: string, data?: object): Promise<T> {
return requestHttp<T>(url, http.RequestMethod.PUT, data)
}
}
二次封装
post请求
/** 交货的API */
export function deliverAPI(data: DeliverParamsTypeModel) {
return Request.post('/driver/tasks', data)
}
get请求
export function getTaskListAPI(data: TaskListParamsModel) {
return Request.get<TaskListDataModel>('/tasks/list', data)
}
使用方法
const data = await getTaskListAPI(this.queryParams)