Add API Module #12

Merged
MrKBear merged 4 commits from dev-mrkbear into master 2021-12-30 16:18:24 +08:00
2 changed files with 87 additions and 16 deletions
Showing only changes of commit c3773a3c71 - Show all commits

View File

@ -1,3 +1,4 @@
import mitt, { Emitter } from "./EventEmitter";
import { LogLabel } from "./LogLabel";
import { Logger } from "./Logger";
import { LevelLogLabel, colorRadio } from "./PresetLogLabel";
@ -62,13 +63,33 @@ type IParamSetting<T extends IAnyData> = {
}
}
/**
* API
*/
type IAPIEvent<I extends IAnyData, O extends IAnyData> = {
/**
*
*/
initData: Partial<I>;
/**
*
*/
parseRequestData: Partial<I>;
}
/**
*
*/
class API<I extends IAnyData, O extends IAnyData> {
/**
* URL
* TODO: 这里可能涉及负载均衡
*/
public static get baseUrl():string {
return "https://xxx.xxx"
return "https://xxx.xxx";
}
public static defaultLogLabel:LogLabel = new LogLabel(
@ -80,6 +101,15 @@ class API<I extends IAnyData, O extends IAnyData> {
*/
private LogLabel:LogLabel = API.defaultLogLabel;
/**
*
*/
private emitter:Emitter<IAPIEvent<I, O>>;
public get on() { return this.emitter.on };
public get off() { return this.emitter.on };
public get emit() { return this.emitter.emit };
/**
* Api ID
*/
@ -105,15 +135,21 @@ class API<I extends IAnyData, O extends IAnyData> {
*/
public requestData?:IWxRequestOption<O>;
/**
* (wx.request)
*/
public timeout?:number;
//#region wx.request
/**
* (wx.request)
*/
public timeout?:number;
public method:HTTPMethod = HTTPMethod.GET;
public enableHttp2:boolean = false;
public enableQuic:boolean = false;
public enableCache:boolean = false;
/**
* json
* wx.request dataType
*/
public jsonParse:boolean = true;
//#endregion wx.request
/**
*
@ -122,6 +158,7 @@ class API<I extends IAnyData, O extends IAnyData> {
*/
public constructor(data?: Partial<I>) {
this.data = data ?? {};
this.emitter = mitt<IAPIEvent<I, O>>();
}
/**
@ -185,6 +222,9 @@ class API<I extends IAnyData, O extends IAnyData> {
}
}
}
// 触发数据初始化事件
this.emit("initData", this.data);
}
/**
@ -201,28 +241,51 @@ class API<I extends IAnyData, O extends IAnyData> {
// 重置请求数据
const requestData:IWxRequestOption<O> = this.requestData = {
url: API.baseUrl + this.url,
data: {}, header: {},
timeout: this.timeout,
method: this.method,
dataType: this.jsonParse ? "json" : undefined,
enableHttp2: this.enableHttp2,
enableQuic: this.enableQuic,
enableCache: this.enableCache
};
// 数据解析
for (let key in this.params) {
let data = this.data[key];
let { parse } = this.params[key];
// 数据预解析
if (parse !== void 0) {
this.data[key] = parse(data!, key, this.data as DeepReadonly<Partial<I>>);
}
}
// 触发数据解析
this.emit("parseRequestData", this.data);
// 数据收集
for (let key in this.params) {
let data = this.data[key];
let { isHeader, isTemplate, parse } = this.params[key];
// 数据预解析
if (parse !== void 0) {
data = parse(data!, key, this.data as DeepReadonly<Partial<I>>);
}
let { isHeader, isTemplate } = this.params[key];
// 加载数据
if (!isTemplate) {
if (isHeader) {
wx.request
requestData.header![key] = data;
} else {
(requestData.data as IAnyData)[key] = data;
}
}
}
}
}
/**
* HTTP
*/
enum HTTPMethod {
OPTIONS = "OPTIONS",
GET = "GET",

View File

@ -33,7 +33,8 @@ implements Partial<ILifetime> {
public override params: IParamSetting<ITestApiInput> = {
name: {
tester: "123"
tester: "123",
isHeader: true
},
id: {
parse: (i) => ++i,
@ -43,8 +44,15 @@ implements Partial<ILifetime> {
public constructor(data:ITestApiInput) {
super(data);
this.on("initData", (data) => {
console.log("initData", data)
})
this.on("parseRequestData", (data) => {
console.log("parseRequestData", data)
})
this.initLabel();
this.initData();
this.collectData();
}
}