开发工具 Dev studio 5.0
import { http } from '@kit.NetworkKit'
import { ILoginUserData } from '../../models/LoginModel'
import { promptAction, router } from '@kit.ArkUI'
import { IResponseModel } from '../../models/IResponseModel'
import { Logger } from './LoggerUtils'
// 对网络请求的封装
//基础地址
const baseUrl = 'https://api-harmony-teach.itheima.net/'
export default class HttpMethod {
// 封装post请求
static async post<T>(url: string, extraData?: Object) {
try {
// 请求路径
url = baseUrl + url
// 请求参数
let options: http.HttpRequestOptions = {
// 请求方法
method: http.RequestMethod.POST,
// 请求头
header: {
"Content-Type": 'application/json',
},
// 返回数组自动转换为对象格式
expectDataType: http.HttpDataType.OBJECT
}
// 判断参数extraData存不存在,存在则加入到option中
if (extraData) {
options.extraData = extraData
}
// 获取token
let user = AppStorage.get('UserInfo') as ILoginUserData
let token = user?.token
if (token && options.header) {
// 在option的请求头header中加入属性'Authorization'
options.header['Authorization'] = `Bearer ${token}`
}
// 发起post请求
let res = await http.createHttp().request(url, options)
// 处理响应结果
let result = res.result as IResponseModel<T>
// 判断是否正常登录
if (result.code !== 10000) {
// 判断token是否失效
if (result.code === 401) {
promptAction.showToast({
message: 'token失效,请重新登录'
})
router.replaceUrl({
url: "pages/LoginPage"
})
}
promptAction.showToast({
message: `登录失败,失败原因${result.message}`
})
}
// 返回result结果值
return result
} catch (e) {
promptAction.showToast({
message: `post请求错误,${e}`
})
return Promise.reject(e) //return错误值
}
}
// 封装GET请求
static async get<T>(url: string, extraData?: Object) {
try {
const httpReq = http.createHttp()
//拼接域名和路径
url = baseUrl + url
let options: http.HttpRequestOptions = {
method: http.RequestMethod.GET,
header: {
"Content-Type": 'application/json',
},
expectDataType: http.HttpDataType.OBJECT,
}
// 判断extraData存不存在,存在则加入到option中
if (extraData) {
options.extraData = extraData
}
let user = AppStorage.get('UserInfo') as ILoginUserData
let token = user?.token
if (token && options.header) {
options.header["Authorization"] = `Bearer ${token}`
}
const res = await httpReq.request(url, options)
const result = res.result as IResponseModel<T>
//状态码不为10000的情况->失败
if (result.code !== 10000) {
if (result.code === 401) {
promptAction.showToast({
message: 'token失效,请重新登录'
})
router.replaceUrl({
url: 'pages/LoginPage'
})
} else {
promptAction.showToast({
message: result.message
})
}
}
return result
}
catch (err) {
promptAction.showToast({
message: 'get请求错误'+err
})
return Promise.reject(err)
}
}
}