1、封装请求库
1、在ets下面新建utils文件夹 创建request.ets
2、代码
// 导入请求包
import http from '@ohos.net.http';
// 根据后端返回的数据结构自己定义返回体
import Response from '../api/BaseReturn';
// 本地持久化存储
import PreferenceModel from '../mode/PreferenceModel';
interface requestHeader {
"Content-Type"?: string,
"Authorization"?: string
}
// 每一个httpRequest对应一个http请求任务,不可复用
let httpRequest = http.createHttp();
export const request = async (reqUrl: string, data: any, method?: http.RequestMethod, header?: requestHeader) :Promise<Response<any>> => {
const url = reqUrl.includes('http' || 'https') ? reqUrl : 'https://xxx.xxx.com' + reqUrl
const methodType = method || http.RequestMethod.POST
const token = await PreferenceModel.getPreference('tokenInfo', 'token')
let extraDataInfo = data || {}
if (methodType === http.RequestMethod.GET || (header && header['Content-Type'] === 'application/x-www-form-urlencoded')) {
extraDataInfo = Object.keys(data).map(function(key) {
return key + '=' + data[key];
}).join('&');
}
let responseResult = httpRequest.request(url, {
method: methodType,
connectTimeout: 60000,
readTimeout: 60000,
header: {
'Hwkj-Custom-Client': 'PlatformOfWeb',
"Authorization": token ? 'Bearer ' + token : '',
...header
},
extraData: extraDataInfo
})
let response = new Response();
return responseResult.then((value: http.HttpResponse) => {
console.log('value1', (value.result))
if (value.responseCode === 200) {
//获取返回数据,将返回的json数据解析成事先预定好的响应格式
//这里建议和后端的保持一致
let res: Response<any> = JSON.parse(`${value.result}`);
response.Data = (res.Data || res.Data === null) || res;
response.Content = res.Content || '';
response.Succeeded = res.Succeeded || true;
response.Type = res.Type || 200
} else {
response.Content = '请求错误';
response.Type = 400;
}
return response;
}).catch(() => {
response.Content = '请求错误';
response.Type = 400;
return response;
});
}
2、使用请求
1、在ets下面新建api文件夹
2、请求代码
// 导入封装好的请求
import { request } from '../../utils/request'
import { GetFollowUpTempPageListType } from './types';
import BaseReturn from '../BaseReturn';
const FIX = 'consult'
/**
* 获取随访模板
*/
export const GetFollowUpTempPage = (data: any): Promise<BaseReturn<GetFollowUpTempPageListType>> => {
return request(`/${FIX}/api/v1/FollowUp/GetFollowUpTempPage`, data);
};
3、页面调用
import { GetFollowUpTempPage } from '../api/consult'
import { GetFollowUpTempPageType } from '../api/consult/types'
import { GetDict} from '../api/dictionary'
import { GetDictType } from '../api/dictionary/types';
import PreferenceModel from '../mode/PreferenceModel';
@Entry
@Component
struct Home {
@State message: string = 'Hello World'
@State list: GetFollowUpTempPageType[] = []
@State list1: GetDictType[] = []
aboutToAppear() {
this.getHomePostData()
this.getHomeGetData()
}
async getHomeGetData() {
const data = {
code: 'DiseaseDict',
orgId: null
}
let res = await GetDict(data)
if (res.Type === 200) {
this.list1 = res.Data
}
}
async getHomePostData() {
let res = await GetFollowUpTempPage({"PageIndex":1,"PageSize":10,"OrgId":null})
if (res.Type === 200) {
this.list = res.Data.Data
}
}
build() {
Column() {
ForEach(this.list, (item: GetFollowUpTempPageType) => {
Text(item.Name)
})
Text('------------------')
ForEach(this.list1, (item: GetDictType) => {
Text(item.Key)
})
Button('清除token', { type: ButtonType.Normal, stateEffect: true })
.onClick(() => {
PreferenceModel.deletePreferences('tokenInfo')
})
}
}
}
4、效果
上一章:HarmonyOS实现登录页面-CSDN博客
下一章: HarmonyOS实现Tabs-CSDN博客