miniprogram-request
Version:
A better Request package for MiniProgram API
126 lines • 5.43 kB
JavaScript
import { LifeCycle } from 'miniprogram-network-life-cycle';
import { transformRequestSendDefault } from './transform';
/**
* 小程序HTTP 请求生命周期封装
* @example
* `const http = new Http({ baseURL: 'https://api.newfuture.cc/', retry: 3 });`
* @template TExt 扩展参数属性类型
*/
export class Http extends LifeCycle {
/**
* 新建 Http实列
* @param config 全局默认配置
* @param request 请求处理方法,默认使用请求队列处理
* @param listeners 请求事件监听
*/
constructor(config, request, listeners) {
super(
// tslint:disable-next-line: no-use-before-declare
request || wx.request,
// tslint:disable-next-line: no-object-literal-type-assertion
config || { transformSend: transformRequestSendDefault }, listeners);
}
request() {
const argNum = arguments.length;
// tslint:disable-next-line: no-unsafe-any
const options = argNum === 1 ? arguments[0] : (arguments[3] || {});
if (argNum > 1) {
options.method = arguments[0];
options.url = arguments[1];
if (argNum > 2) {
// tslint:disable-next-line: no-unsafe-any
options.data = arguments[2];
}
}
return this.process(options);
}
/**
* GET 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 可转为query string
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData get query data请求参数的格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
// tslint:disable-next-line: no-reserved-keywords
get(action, data, config) {
return this.request('GET', action, data, config);
}
/**
* POST 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 操作数据,默认会以json方式上传
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData post data参数格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
post(action, data, config) {
return this.request('POST', action, data, config);
}
/**
* PUT 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 操作数据,默认会以json方式上传
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData post data数据格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
put(action, data, config) {
return this.request('PUT', action, data, config);
}
/**
* DELETE 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 可转为query string
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData put query data参数格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
// tslint:disable-next-line: no-reserved-keywords
delete(action, data, config) {
return this.request('DELETE', action, data, config);
}
/**
* HEAD 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 可转为query string
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData head query data参数格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
head(action, data, config) {
return this.request('HEAD', action, data, config);
}
/**
* Patch 操作
* 由于小程序不支持PATCH 方法
* 采用X-HTTP-Method-Override兼容处理,需要服务器端支持
* @param action 请求操作URL,支持{name}格式参数
* @param data 操作数据,默认会以json方式上传
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData patch data参数格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
patch(action, data, config) {
if (!config) {
// tslint:disable-next-line: no-parameter-reassignment
config = {
headers: { 'X-HTTP-Method-Override': 'PATCH' }
};
}
else if (!config.headers) {
config.headers = { 'X-HTTP-Method-Override': 'PATCH' };
}
else {
config.headers['X-HTTP-Method-Override'] = 'PATCH';
}
return this.request('POST', action, data, config);
}
}
//# sourceMappingURL=http.js.map