2021-04-22 20:27:16 +08:00
|
|
|
|
export type Request = <TResp>(options: IRequestOption) => Promise<TResp>;
|
|
|
|
|
|
|
|
|
|
|
|
export type IAnyObject = WechatMiniprogram.IAnyObject;
|
|
|
|
|
|
|
2019-01-03 19:38:37 +08:00
|
|
|
|
export interface IInitOption {
|
|
|
|
|
|
/* 用code换取session的CGI配置 */
|
|
|
|
|
|
codeToSession: ICodeToSessionOptions;
|
2021-07-23 16:47:36 +08:00
|
|
|
|
/* 所有请求会带上以此为key的票据;可不配置,票据名默认为session */
|
2019-01-03 19:38:37 +08:00
|
|
|
|
sessionName: string;
|
2020-03-09 20:09:30 +08:00
|
|
|
|
/* 设置请求头 */
|
|
|
|
|
|
setHeader?: (()=> IAnyObject) | object;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* 请求URL的固定前缀,如果配置了,后续请求的URL都会自动加上这个前缀,如果是函数,则为函数的返回值 */
|
|
|
|
|
|
urlPerfix?: string | (() => string);
|
|
|
|
|
|
/* 是否需要调用checkSession,验证小程序的登录态过期;若业务不需要使用到session_key,则可配置为true */
|
|
|
|
|
|
doNotCheckSession?: boolean;
|
|
|
|
|
|
/* 登录重试次数,当连续请求登录接口返回失败次数超过这个次数,将不再重试登录 */
|
|
|
|
|
|
reLoginLimit?: number;
|
|
|
|
|
|
/* 当出现接口逻辑错误时,会执行统一的回调函数,这里可以做统一的错误上报等处理 */
|
2019-04-02 20:34:57 +08:00
|
|
|
|
errorCallback?: ((obj: IAnyObject, res: string | IAnyObject | ArrayBuffer) => void) | null;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* 接口返回成功之后,会执行统一的回调函数,这里可以做统一的耗时上报等处理 */
|
|
|
|
|
|
reportCGI?: boolean | ((
|
|
|
|
|
|
/* 调用的接口名字,可在request接口的report字段配置 */
|
|
|
|
|
|
name: string,
|
|
|
|
|
|
/* 发起请求时的时间戳 */
|
|
|
|
|
|
startTime: number,
|
|
|
|
|
|
/* 请求返回时的时间戳 */
|
|
|
|
|
|
endTime: number,
|
|
|
|
|
|
/* 请求方法,可用于上报 */
|
2019-01-10 22:46:22 +08:00
|
|
|
|
request: Function
|
2019-01-03 19:38:37 +08:00
|
|
|
|
) => void);
|
|
|
|
|
|
/* 可为接口提供mock数据 */
|
2019-01-04 18:41:46 +08:00
|
|
|
|
mockJson?: any;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/** 所有请求都会自动带上这里的参数 */
|
|
|
|
|
|
globalData?: boolean | object | Function;
|
2021-07-23 16:47:36 +08:00
|
|
|
|
/** 如果为用户登陆态设置了本地缓存时间,则过期时间将以此值为key存储在Storage中 */
|
2019-03-08 22:50:32 +08:00
|
|
|
|
sessionExpireKey?: string;
|
2021-07-23 16:47:36 +08:00
|
|
|
|
/* 为用户登陆态设置本地缓存时间(单位为ms),一旦过期,直接废弃缓存中的登陆态 */
|
2019-01-24 10:26:51 +08:00
|
|
|
|
sessionExpireTime?: number;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* 触发重新登录的条件;参数为CGI返回的数据,返回需要重新登录的条件 */
|
|
|
|
|
|
loginTrigger?: (res: string | IAnyObject | ArrayBuffer) => boolean;
|
|
|
|
|
|
/* 触发请求成功的条件;参数为CGI返回的数据,返回接口逻辑成功的条件 */
|
2019-01-04 18:41:46 +08:00
|
|
|
|
successTrigger: (res: string | IAnyObject | ArrayBuffer) => boolean;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* 成功之后返回数据;参数为CGI返回的数据,返回逻辑需要使用的数据 */
|
2019-04-04 16:32:51 +08:00
|
|
|
|
successData?: (res: string | IAnyObject | ArrayBuffer) => string | IAnyObject | ArrayBuffer;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* 接口逻辑失败时,错误弹窗的标题 */
|
|
|
|
|
|
errorTitle?: string | ((res: string | IAnyObject | ArrayBuffer) => string);
|
|
|
|
|
|
/* 接口逻辑失败时,错误弹窗的内容 */
|
|
|
|
|
|
errorContent?: string | ((res: string | IAnyObject | ArrayBuffer) => string);
|
2020-03-09 19:38:57 +08:00
|
|
|
|
/* 接口逻辑失败时,错误弹窗是否显示重试按钮 */
|
|
|
|
|
|
errorRetryBtn?: boolean;
|
2019-04-10 19:18:51 +08:00
|
|
|
|
/* 当请求为非GET时,不将登陆态等参数放在queryString上(默认都放queryString) */
|
|
|
|
|
|
doNotUseQueryString?: boolean;
|
2021-04-14 15:22:54 +08:00
|
|
|
|
/* 自定义错误处理函数 */
|
|
|
|
|
|
errorHandler?: Function | null;
|
2021-06-15 15:40:24 +08:00
|
|
|
|
/* 请求发送前,提供hook给开发者自定义修改发送内容 */
|
|
|
|
|
|
beforeSend?: Function | null;
|
2023-04-19 11:38:15 +08:00
|
|
|
|
/* 自定义系统错误处理函数 */
|
|
|
|
|
|
systemErrorHandler?: Function | null;
|
2023-05-12 16:18:00 +08:00
|
|
|
|
/* 备用域名 */
|
2023-05-15 15:15:43 +08:00
|
|
|
|
backupDomainList?: IAnyObject;
|
2023-05-12 16:18:00 +08:00
|
|
|
|
/* 备用域名启用时回调函数 */
|
|
|
|
|
|
backupDomainEnableCallback?: Function;
|
2023-06-27 14:21:33 +08:00
|
|
|
|
/* 是否需要启用备用域名 */
|
|
|
|
|
|
domainChangeTrigger?: Function;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export interface ICodeToSessionOptions{
|
2021-04-22 20:27:16 +08:00
|
|
|
|
/* CGI的url */
|
|
|
|
|
|
url: string;
|
|
|
|
|
|
/* 调用该CGI的方法 */
|
|
|
|
|
|
method?: 'OPTIONS'
|
|
|
|
|
|
| 'GET'
|
|
|
|
|
|
| 'HEAD'
|
|
|
|
|
|
| 'POST'
|
|
|
|
|
|
| 'PUT'
|
|
|
|
|
|
| 'DELETE'
|
|
|
|
|
|
| 'TRACE'
|
|
|
|
|
|
| 'CONNECT',
|
|
|
|
|
|
/* CGI中传参时,存放code的名称 */
|
|
|
|
|
|
codeName?: string;
|
|
|
|
|
|
/* 登录接口需要的其他参数 */
|
|
|
|
|
|
data?: string | Function | IAnyObject | ArrayBuffer;
|
|
|
|
|
|
/* 接口返回成功的函数;需要返回session的值 */
|
|
|
|
|
|
success: Function;
|
|
|
|
|
|
/* code换取session的接口逻辑出错时,执行的函数,若配置了此函数,则不再默认弹窗报错 */
|
|
|
|
|
|
fail?: Function;
|
|
|
|
|
|
/* codeToSession的上报字段名 */
|
|
|
|
|
|
report?: string;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-04 18:41:46 +08:00
|
|
|
|
export interface IRequestOption extends IRequestObject {
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* 发起请求前执行的函数 */
|
|
|
|
|
|
beforeSend?: Function;
|
|
|
|
|
|
/* 请求过程页面是否展示全屏的loading */
|
|
|
|
|
|
showLoading?: boolean | string;
|
|
|
|
|
|
/* 接口请求成功后将自动执行init()中配置的reportCGI函数,其中的name字段值为这里配置的值 */
|
|
|
|
|
|
report?: string;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 是否需要缓存 */
|
2019-04-02 20:34:57 +08:00
|
|
|
|
cache?: boolean | ((res: string | IAnyObject | ArrayBuffer) => boolean);
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 当启用缓存时,决定除了返回缓存内容外,是否还返回接口实时内容,以防止页面多次渲染的抖动 */
|
|
|
|
|
|
noCacheFlash?: boolean;
|
|
|
|
|
|
/* 接口调用成功的回调函数 */
|
2019-01-10 22:46:22 +08:00
|
|
|
|
success?: (res: string | IAnyObject | ArrayBuffer, cacheInfo?: object) => void;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 接口调用结束的回调函数(调用成功、失败都会执行) */
|
|
|
|
|
|
complete?: ()=> void;
|
|
|
|
|
|
/** 接口调用失败 或 逻辑失败 的回调函数 */
|
|
|
|
|
|
fail?: (res: string | IAnyObject | ArrayBuffer)=> void;
|
2019-01-24 10:26:51 +08:00
|
|
|
|
/** 当使用Promise模式时,开发者是否需要捕获错误(默认不捕获,统一自动处理错误) */
|
|
|
|
|
|
catchError?: boolean;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
}
|
2019-01-03 19:38:37 +08:00
|
|
|
|
|
2021-04-22 20:27:16 +08:00
|
|
|
|
export interface IRequestObject extends WechatMiniprogram.RequestOption{
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 业务请求的原始url */
|
2019-03-08 22:50:32 +08:00
|
|
|
|
originUrl?: string;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 重登陆次数 */
|
2019-03-08 22:50:32 +08:00
|
|
|
|
reLoginCount?: number;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 请求发起的时间戳 */
|
2019-03-08 22:50:32 +08:00
|
|
|
|
_reportStartTime?: number;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 请求返回的时间戳 */
|
2019-03-08 22:50:32 +08:00
|
|
|
|
_reportEndTime?: number;
|
2020-03-09 19:38:57 +08:00
|
|
|
|
/* 请求成功resolve */
|
|
|
|
|
|
_resolve?: (value?: any) => void;
|
|
|
|
|
|
/* 请求失败reject */
|
|
|
|
|
|
_reject?: (reason?: any) => void;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-04 18:41:46 +08:00
|
|
|
|
export interface IUploadFileOption extends IUploadFileObject {
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* 发起请求前执行的函数 */
|
|
|
|
|
|
beforeSend?: Function;
|
|
|
|
|
|
/* 请求过程页面是否展示全屏的loading */
|
|
|
|
|
|
showLoading?: boolean | string;
|
|
|
|
|
|
/* 接口请求成功后将自动执行init()中配置的reportCGI函数,其中的name字段值为这里配置的值 */
|
|
|
|
|
|
report?: string;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 接口调用成功的回调函数 */
|
2019-01-10 22:46:22 +08:00
|
|
|
|
success?: (res: string | IAnyObject | ArrayBuffer, cacheInfo?: object) => void;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 接口调用结束的回调函数(调用成功、失败都会执行) */
|
|
|
|
|
|
complete?: ()=> void;
|
|
|
|
|
|
/** 接口调用失败 或 逻辑失败 的回调函数 */
|
|
|
|
|
|
fail?: (res: string | IAnyObject | ArrayBuffer)=> void;
|
2019-01-24 10:26:51 +08:00
|
|
|
|
/** 当使用Promise模式时,开发者是否需要捕获错误(默认不捕获,统一自动处理错误) */
|
|
|
|
|
|
catchError?: boolean;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-04-22 20:27:16 +08:00
|
|
|
|
export interface IUploadFileObject extends WechatMiniprogram.UploadFileOption {
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 业务请求的原始url */
|
2019-03-08 22:50:32 +08:00
|
|
|
|
originUrl?: string;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 重登陆次数 */
|
2019-03-08 22:50:32 +08:00
|
|
|
|
reLoginCount?: number;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 请求发起的时间戳 */
|
2019-03-08 22:50:32 +08:00
|
|
|
|
_reportStartTime?: number;
|
2019-01-04 18:41:46 +08:00
|
|
|
|
/* 请求返回的时间戳 */
|
2019-03-08 22:50:32 +08:00
|
|
|
|
_reportEndTime?: number;
|
2020-03-09 19:38:57 +08:00
|
|
|
|
/* 请求成功resolve */
|
|
|
|
|
|
_resolve?: (value?: any) => void;
|
|
|
|
|
|
/* 请求失败reject */
|
|
|
|
|
|
_reject?: (reason?: any) => void;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export interface IGetConfigResult {
|
|
|
|
|
|
/* 在组件初始化时传入的请求URL的固定前缀 */
|
|
|
|
|
|
urlPerfix?: string | (() => string);
|
|
|
|
|
|
/* 在组件初始化时传入的用户登陆态设置本地缓存时间 */
|
|
|
|
|
|
sessionExpireTime?: number;
|
|
|
|
|
|
/* 在组件初始化时传入的用户登陆态本地缓存时间Storage的key */
|
|
|
|
|
|
sessionExpireKey?: string;
|
|
|
|
|
|
/* 用户登陆态本地缓存过期的时间戳 */
|
|
|
|
|
|
sessionExpire?: number;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export interface weRequest {
|
2019-04-02 20:34:57 +08:00
|
|
|
|
/** 初始化 */
|
|
|
|
|
|
init: (obj: IInitOption) => void;
|
|
|
|
|
|
/** 请求 */
|
2019-04-09 10:51:18 +08:00
|
|
|
|
request: (option: IRequestOption) => Promise<object>;
|
2019-04-02 20:34:57 +08:00
|
|
|
|
/** 上传文件 */
|
2019-04-09 10:51:18 +08:00
|
|
|
|
uploadFile: (option: IUploadFileOption) => Promise<object>;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* 获取本地缓存中用户票据的值 */
|
2019-04-02 20:34:57 +08:00
|
|
|
|
getSession: () => string;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* 获取weRequest的配置 */
|
2019-04-02 20:34:57 +08:00
|
|
|
|
getConfig: () => IGetConfigResult;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* [不建议使用] 在不发起业务请求的情况下,单独执行登录逻辑 */
|
2019-04-02 20:34:57 +08:00
|
|
|
|
login: (callback: Function) => void;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
/* [不建议使用] 设置用户票据的值 */
|
2019-04-02 20:34:57 +08:00
|
|
|
|
setSession: (x: string) => void;
|
2019-04-01 17:47:17 +08:00
|
|
|
|
/* 获取weRequest版本 */
|
2019-04-02 20:34:57 +08:00
|
|
|
|
version: string;
|
2019-01-03 19:38:37 +08:00
|
|
|
|
}
|
2022-08-03 16:30:28 +08:00
|
|
|
|
|
|
|
|
|
|
export interface IErrorObject {
|
|
|
|
|
|
type: 'logic-error' | 'http-error' | 'system-error'
|
|
|
|
|
|
res: WechatMiniprogram.RequestSuccessCallbackResult | WechatMiniprogram.GeneralCallbackResult,
|
|
|
|
|
|
}
|