vue-axios-optimize 1.0.3 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -15
- package/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -311,21 +311,21 @@ export function patchDemo2(data = {}, config = {}) {
|
|
|
311
311
|
|
|
312
312
|
## options配置
|
|
313
313
|
|
|
314
|
-
| 参数
|
|
315
|
-
|
|
|
316
|
-
| showLoadingFun(config, requestingNum)
|
|
317
|
-
| hideLoadingFun(config, requestingNum)
|
|
318
|
-
| openRefresh
|
|
319
|
-
| refreshApiUrl
|
|
320
|
-
| getRefreshTokenFun()
|
|
321
|
-
| reloginFun(response)
|
|
322
|
-
| refreshTokenStore(refreshToken)
|
|
323
|
-
| setAccessTokenFun(config, accessToken)
|
|
324
|
-
| responseResultFun(res)
|
|
325
|
-
| formatAccessTokenFun(data)
|
|
326
|
-
| accessTokenExpirationCode
|
|
327
|
-
| refreshTokenExpirationCode
|
|
328
|
-
| responseTypesStr(v1.0.2)
|
|
314
|
+
| 参数 | 类型 | 说明 | 是否必传 | 默认值 |
|
|
315
|
+
| ------------------------------------------ | -------- | ------------------------------------------------------------ | ------------------------- | ----------------------------------- |
|
|
316
|
+
| showLoadingFun(config, requestingNum) | Function | 展示动画,config为该请求的config,requestingNum为目前正在请求几个接口,此处可执行一些展示全局动画的操作 | 否 | 无 |
|
|
317
|
+
| hideLoadingFun(config, requestingNum) | Function | 隐藏动画,config为该请求的config,requestingNum为目前正在请求几个接口,此时应该为0,此处可执行关闭全局动画的操作 | 否 | 无 |
|
|
318
|
+
| openRefresh | Boolean | 是否开启无感知刷新token | 否 | false |
|
|
319
|
+
| refreshApiUrl | String | 请求刷新token接口的api地址 如/xiaobu-admin/refresh-token | 当openRefresh为true时必传 | 无 |
|
|
320
|
+
| getRefreshTokenFun() | Function | 获取当前项目的 refreshToken方法, 记得 return 回去 | 当openRefresh为true时必传 | 无 |
|
|
321
|
+
| reloginFun(response) | Function | response 为axios实例中返回的数据,此处建议执行清除token相关缓存并弹框提示,点击确认进行刷新页面操作 | 当openRefresh为true时必传 | 无 |
|
|
322
|
+
| refreshTokenStore(refreshToken) | Function | refreshToken为当前浏览器缓存的refreshToken,需要返回一个Promise,利用此refreshToken调用接口获取新的accessToken 并设置。v1.0.6及以上 需 resolve(accessToken) 旧版本则resolve(data) data为接口返回的数据 | 当openRefresh为true时必传 | 无 |
|
|
323
|
+
| setAccessTokenFun(config, accessToken) | Function | config为该请求的config,accessToken 为新获取的accessToken, 此处需要将accessToken设置到请求头中 | 当openRefresh为true时必传 | 无 |
|
|
324
|
+
| responseResultFun(res) | Function | res为axios实例返回的res,格式化接口请求成功后返回的数据 | 非必传 | axios实例返回的res |
|
|
325
|
+
| formatAccessTokenFun(data) v1.0.6已废除 | Function | data为responseResultFun报错时返回的res | 非必传 | axios实例返回的res.data.accessToken |
|
|
326
|
+
| accessTokenExpirationCode | number | 配置accessToken过期返回的业务状态码 | 非必传 | 401 |
|
|
327
|
+
| refreshTokenExpirationCode | number | 配置refreshToken过期返回的业务状态码 | 非必传 | 403 |
|
|
328
|
+
| responseTypesStr(v1.0.2) | String | 配置数据返回类型,实现当此类型时返回原封不动的响应数据的data数据 | 非必传 | 无 |
|
|
329
329
|
|
|
330
330
|
## store/user.ts代码大致如下
|
|
331
331
|
|
|
@@ -471,6 +471,14 @@ module.exports = {
|
|
|
471
471
|
[vue2-water-marker水印插件](https://www.npmjs.com/package/vue2-water-marker)
|
|
472
472
|
|
|
473
473
|
## 更新日志
|
|
474
|
+
### 1.0.6
|
|
475
|
+
|
|
476
|
+
1. 【优化】废除options的formatAccessTokenFun配置项
|
|
477
|
+
2. 【优化】refreshTokenStore由原来的resolve接口返回的数据,改为resolve(accessToken)
|
|
478
|
+
|
|
479
|
+
### 1.0.5
|
|
480
|
+
|
|
481
|
+
1. 【优化】修复部分检查代码比较严格的时候 会报 responseType 未定义的错误的问题
|
|
474
482
|
|
|
475
483
|
### 1.0.3
|
|
476
484
|
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
class e{instance;requestObj={};requestingNum=0;authErrorArr=[];queue=[];isRefresh=!1;isShowReLoginDialog=!1;constructor(e,s,r){this.instance=s,this.instance.interceptors.request.use((s=>{s?.noShowLoading||(this.requestingNum++,r.showLoadingFun&&r.showLoadingFun(s,this.requestingNum));const
|
|
1
|
+
class e{instance;requestObj={};requestingNum=0;authErrorArr=[];queue=[];isRefresh=!1;isShowReLoginDialog=!1;constructor(e,s,r){this.instance=s,this.instance.interceptors.request.use((s=>{s?.noShowLoading||(this.requestingNum++,r.showLoadingFun&&r.showLoadingFun(s,this.requestingNum));const i=s.url;if(r.openRefresh){-1===this.authErrorArr.indexOf(i)&&this.isRefresh&&i!==r.refreshApiUrl&&this.authErrorArr.push(i)}if(i&&s.preventDuplicateRequestsType)if("cancel"===s.preventDuplicateRequestsType){this.requestObj[i]&&this.requestObj[i].cancel({config:s,isCancel:!0});const r=e.CancelToken;this.requestObj[i]=r.source(),s.cancelToken=this.requestObj[i].token}else if("prevent"===s.preventDuplicateRequestsType){if("requesting"===this.requestObj[i])return Promise.reject({config:s,isPrevent:!0});this.requestObj[i]="requesting"}return s}),(e=>Promise.reject(e))),this.instance.interceptors.response.use((async e=>{const{config:s,responseErr:i}=e;if(s?.noShowLoading||(this.requestingNum--,this.requestingNum<=0&&(this.requestObj={},r.hideLoadingFun&&r.hideLoadingFun(s,this.requestingNum))),s&&this.requestObj[s.url]&&delete this.requestObj[s.url],i){if(r.openRefresh){const i=this.authErrorArr.indexOf(s.url);if(-1!==i)return this.authErrorArr.splice(i,1),new Promise((e=>{this.queue.push((i=>{r.setAccessTokenFun(s,i),e(this.instance.request(s))}))}));const t=r.accessTokenExpirationCode||401;if(Number(e.code)===t){const i=r.getRefreshTokenFun();if(!i){if(this.isShowReLoginDialog)return;return this.isShowReLoginDialog=!0,r.reloginFun(e),Promise.reject(new Error(e.message||"Error"))}if(this.isRefresh)return new Promise((e=>{this.queue.push((i=>{r.setAccessTokenFun(s,i),e(this.instance.request(s))}))}));this.isRefresh=!0;try{const e=await r.refreshTokenStore(i);return this.queue.forEach((s=>s(e))),this.instance.request(s)}catch{if(this.isShowReLoginDialog)return;return this.isShowReLoginDialog=!0,r.reloginFun(e),Promise.reject(new Error(e.message||"Error"))}finally{this.queue=[],this.isRefresh=!1}}const n=r.refreshTokenExpirationCode||403;if(Number(e.code)===n){if(this.isShowReLoginDialog)return;return this.isShowReLoginDialog=!0,r.reloginFun(e),Promise.reject(new Error(e.message||"Error"))}}return Promise.reject(new Error(e.message||"Error"))}if(r?.responseTypesStr?.toLocaleLowerCase().split(",").includes(s?.responseType?.toLocaleLowerCase()))return e.data;const t=JSON.parse(JSON.stringify(e));return delete t.responseErr,r.responseResultFun?r.responseResultFun(t):t}),(e=>{const s=e.config||e?.message?.config||{};return s?.noShowLoading||(this.requestingNum--,this.requestingNum<=0&&(this.requestObj={},r.hideLoadingFun&&r.hideLoadingFun(s,this.requestingNum))),e.isPrevent||e?.message?.isCancel||delete this.requestObj[s.url],Promise.reject(e)}))}}export default e;
|