feat: 支持使用方自己判断错误是否进行域名降级 (#77)

* feat: 支持使用方自己判断错误是否进行域名降级

* feat: 增加默认函数

* feat: 补充 code2session 重试
This commit is contained in:
evanna
2023-06-27 14:21:33 +08:00
committed by GitHub
parent 1e7f329ce9
commit a8898b09e0
9 changed files with 12804 additions and 63 deletions

View File

@@ -1,6 +1,7 @@
/// <reference types="miniprogram-api-typings" />
export declare type Request = <TResp>(options: IRequestOption) => Promise<TResp>;
export declare type IAnyObject = WechatMiniprogram.IAnyObject;
/// <reference types="miniprogram-api-typings" />
export type Request = <TResp>(options: IRequestOption) => Promise<TResp>;
export type IAnyObject = WechatMiniprogram.IAnyObject;
export interface IInitOption {
codeToSession: ICodeToSessionOptions;
sessionName: string;
@@ -26,6 +27,7 @@ export interface IInitOption {
systemErrorHandler?: Function | null;
backupDomainList?: IAnyObject;
backupDomainEnableCallback?: Function;
domainChangeTrigger?: Function;
}
export interface ICodeToSessionOptions {
url: string;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

12764
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "we-request",
"version": "1.7.3",
"version": "1.7.4",
"description": "本工具通过拓展小程序的wx.request让开发者通过简单的配置实现自动管理登录态等功能",
"keywords": [
"登录态",
@@ -44,7 +44,7 @@
"ts-loader": "^5.3.1",
"tslint": "^5.12.0",
"tslint-config-prettier": "^1.17.0",
"typescript": "^3.7.4",
"typescript": "^4.9.5",
"webpack": "^4.28.0",
"webpack-cli": "^3.3.12"
},

View File

@@ -60,6 +60,8 @@ export interface IInitOption {
backupDomainList?: IAnyObject;
/* 备用域名启用时回调函数 */
backupDomainEnableCallback?: Function;
/* 是否需要启用备用域名 */
domainChangeTrigger?: Function;
}
export interface ICodeToSessionOptions{

View File

@@ -159,7 +159,7 @@ function doRequest(obj: IRequestOption) {
},
fail(res) {
// 如果主域名不可用,且配置了备份域名,且本次请求未使用备份域名
if ((res?.errMsg?.indexOf('CONNECTION_REFUSED') >= 0 || res?.errMsg?.indexOf('ERR_CONNECTION_RESET') >= 0) && url.isInBackupDomainList(obj.url)) {
if ((config.domainChangeTrigger && config.domainChangeTrigger(res)) && url.isInBackupDomainList(obj.url)) {
// 开启备份域名
enableBackupDomain(obj.url);
// 重试一次
@@ -192,7 +192,7 @@ function doUploadFile(obj: IUploadFileOption) {
},
fail(res) {
// 如果主域名不可用,且配置了备份域名,且本次请求未使用备份域名
if ((res?.errMsg?.indexOf('CONNECTION_REFUSED') >= 0 || res?.errMsg?.indexOf('ERR_CONNECTION_RESET') >= 0) && url.isInBackupDomainList(obj.url)) {
if ((config.domainChangeTrigger && config.domainChangeTrigger(res)) && url.isInBackupDomainList(obj.url)) {
// 开启备份域名
enableBackupDomain(obj.url);
// 重试一次

View File

@@ -206,7 +206,7 @@ async function code2Session(code: string) {
},
fail: (res) => {
// 如果主域名不可用,且配置了备份域名,且本次请求未使用备份域名
if ((res?.errMsg?.indexOf('CONNECTION_REFUSED') >= 0 || res?.errMsg?.indexOf('ERR_CONNECTION_RESET') >= 0) && url.isInBackupDomainList(obj.url)) {
if ((config.domainChangeTrigger && config.domainChangeTrigger(res)) && url.isInBackupDomainList(obj.url)) {
// 开启备份域名
requestHandler.enableBackupDomain(obj.url);
// 重试一次

View File

@@ -33,6 +33,14 @@ const defaultConfig: IInitOption = {
beforeSend: null,
// 自定义系统错误处理函数(网络错误)
systemErrorHandler: null,
// 默认降级处理函数
domainChangeTrigger: (res: WechatMiniprogram.GeneralCallbackResult) => {
// -101 和 -102 默认自动降级
if ((res?.errMsg?.indexOf('CONNECTION_REFUSED') >= 0 || res?.errMsg?.indexOf('ERR_CONNECTION_RESET') >= 0)) {
return true;
}
return false;
}
};
export default defaultConfig;