You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
4.4 KiB
117 lines
4.4 KiB
2 years ago
|
type AnyObject = Record<string | number | symbol, any>
|
||
|
type HttpPromise<T> = Promise<HttpResponse<T>>;
|
||
|
type Tasks = UniApp.RequestTask | UniApp.UploadTask | UniApp.DownloadTask
|
||
|
export interface RequestTask {
|
||
|
abort: () => void;
|
||
|
offHeadersReceived: () => void;
|
||
|
onHeadersReceived: () => void;
|
||
|
}
|
||
|
export interface HttpRequestConfig<T = Tasks> {
|
||
|
/** 请求基地址 */
|
||
|
baseURL?: string;
|
||
|
/** 请求服务器接口地址 */
|
||
|
url?: string;
|
||
|
|
||
|
/** 请求查询参数,自动拼接为查询字符串 */
|
||
|
params?: AnyObject;
|
||
|
/** 请求体参数 */
|
||
|
data?: AnyObject;
|
||
|
|
||
|
/** 文件对应的 key */
|
||
|
name?: string;
|
||
|
/** HTTP 请求中其他额外的 form data */
|
||
|
formData?: AnyObject;
|
||
|
/** 要上传文件资源的路径。 */
|
||
|
filePath?: string;
|
||
|
/** 需要上传的文件列表。使用 files 时,filePath 和 name 不生效,App、H5( 2.6.15+) */
|
||
|
files?: Array<{
|
||
|
name?: string;
|
||
|
file?: File;
|
||
|
uri: string;
|
||
|
}>;
|
||
|
/** 要上传的文件对象,仅H5(2.6.15+)支持 */
|
||
|
file?: File;
|
||
|
|
||
|
/** 请求头信息 */
|
||
|
header?: AnyObject;
|
||
|
/** 请求方式 */
|
||
|
method?: "GET" | "POST" | "PUT" | "DELETE" | "CONNECT" | "HEAD" | "OPTIONS" | "TRACE" | "UPLOAD" | "DOWNLOAD";
|
||
|
/** 如果设为 json,会尝试对返回的数据做一次 JSON.parse */
|
||
|
dataType?: string;
|
||
|
/** 设置响应的数据类型,支付宝小程序不支持 */
|
||
|
responseType?: "text" | "arraybuffer";
|
||
|
/** 自定义参数 */
|
||
|
custom?: AnyObject;
|
||
|
/** 超时时间,仅微信小程序(2.10.0)、支付宝小程序支持 */
|
||
|
timeout?: number;
|
||
|
/** DNS解析时优先使用ipv4,仅 App-Android 支持 (HBuilderX 2.8.0+) */
|
||
|
firstIpv4?: boolean;
|
||
|
/** 验证 ssl 证书 仅5+App安卓端支持(HBuilderX 2.3.3+) */
|
||
|
sslVerify?: boolean;
|
||
|
/** 跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+) */
|
||
|
withCredentials?: boolean;
|
||
|
|
||
|
/** 返回当前请求的task, options。请勿在此处修改options。 */
|
||
|
getTask?: (task: T, options: HttpRequestConfig<T>) => void;
|
||
|
/** 全局自定义验证器 */
|
||
|
validateStatus?: (statusCode: number) => boolean | void;
|
||
|
}
|
||
|
export interface HttpResponse<T = any> {
|
||
|
config: HttpRequestConfig;
|
||
|
statusCode: number;
|
||
|
cookies: Array<string>;
|
||
|
data: T;
|
||
|
errMsg: string;
|
||
|
header: AnyObject;
|
||
|
}
|
||
|
export interface HttpUploadResponse<T = any> {
|
||
|
config: HttpRequestConfig;
|
||
|
statusCode: number;
|
||
|
data: T;
|
||
|
errMsg: string;
|
||
|
}
|
||
|
export interface HttpDownloadResponse extends HttpResponse {
|
||
|
tempFilePath: string;
|
||
|
}
|
||
|
export interface HttpError {
|
||
|
config: HttpRequestConfig;
|
||
|
statusCode?: number;
|
||
|
cookies?: Array<string>;
|
||
|
data?: any;
|
||
|
errMsg: string;
|
||
|
header?: AnyObject;
|
||
|
}
|
||
|
export interface HttpInterceptorManager<V, E = V> {
|
||
|
use(
|
||
|
onFulfilled?: (config: V) => Promise<V> | V,
|
||
|
onRejected?: (config: E) => Promise<E> | E
|
||
|
): void;
|
||
|
eject(id: number): void;
|
||
|
}
|
||
|
export abstract class HttpRequestAbstract {
|
||
|
constructor(config?: HttpRequestConfig);
|
||
|
config: HttpRequestConfig;
|
||
|
interceptors: {
|
||
|
request: HttpInterceptorManager<HttpRequestConfig, HttpRequestConfig>;
|
||
|
response: HttpInterceptorManager<HttpResponse, HttpError>;
|
||
|
}
|
||
|
middleware<T = any>(config: HttpRequestConfig): HttpPromise<T>;
|
||
|
request<T = any>(config: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>;
|
||
|
get<T = any>(url: string, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>;
|
||
|
upload<T = any>(url: string, config?: HttpRequestConfig<UniApp.UploadTask>): HttpPromise<T>;
|
||
|
delete<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>;
|
||
|
head<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>;
|
||
|
post<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>;
|
||
|
put<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>;
|
||
|
connect<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>;
|
||
|
options<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>;
|
||
|
trace<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>;
|
||
|
|
||
|
download(url: string, config?: HttpRequestConfig<UniApp.DownloadTask>): Promise<HttpDownloadResponse>;
|
||
|
|
||
|
setConfig(onSend: (config: HttpRequestConfig) => HttpRequestConfig): void;
|
||
|
}
|
||
|
|
||
|
declare class HttpRequest extends HttpRequestAbstract { }
|
||
|
export default HttpRequest;
|