From d0f850e02dd6aea783b95c2462d930d22cb60c94 Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Wed, 06 Jun 2018 15:14:46 +0800 Subject: [PATCH] 优化超时弹窗 --- src/app/core/net/default.interceptor.ts | 74 +++++++++++++++++++++++------------- 1 files changed, 47 insertions(+), 27 deletions(-) diff --git a/src/app/core/net/default.interceptor.ts b/src/app/core/net/default.interceptor.ts index d7280ea..462eed3 100644 --- a/src/app/core/net/default.interceptor.ts +++ b/src/app/core/net/default.interceptor.ts @@ -22,25 +22,36 @@ @Injectable() export class DefaultInterceptor implements HttpInterceptor { private unLoginHandle: Subject<HttpErrorResponse> = new Subject<HttpErrorResponse>(); + constructor(private injector: Injector) { - this.unLoginHandle.debounceTime(800).subscribe(event => { - if (!!event.error) { - let errorMsg = ''; - const erroCode = Number.parseInt(event.error['errorCode']); - switch (erroCode) { - case 10: errorMsg = '���������,���������'; break; - case 11: errorMsg = '������������,���������������'; break; - case 12: errorMsg = '������������,������������������'; break; - default: errorMsg = '������������,���������������'; break; - } - this.model.info({ - title: errorMsg, - onOk: () => this.goTo('/passport/login') - }); - } + this.unLoginHandle.debounceTime(1000).subscribe( (event: HttpErrorResponse) => { + if (!this.isExpireModelShow && !!event.error) { + this.isExpireModelShow = true; + let errorMsg = ''; + const erroCode = !!event.error['errorCode'] ? Number.parseInt(event.error['errorCode']) : 0; + switch (erroCode) { + case 10: errorMsg = '���������,���������'; break; + case 11: errorMsg = '������������,���������������'; break; + case 12: errorMsg = '������������,������������������'; break; + case 0: errorMsg = '���������������������������'; break; + default: errorMsg = '������������,���������������'; break; + } + // ������refresh��������������������� + this.loginService.clearRefreshToken(); + this.model.info({ + title: errorMsg, + onOk: () => { + this.isExpireModelShow = false; + this.goTo('/passport/login'); + } + }); + } }); } - + private isExpireModelShow = false; + get loginService(): LoginService { + return this.injector.get<LoginService>(LoginService); + } get msg(): NzMessageService { return this.injector.get(NzMessageService); } @@ -55,7 +66,8 @@ // ��������������� `throw` ������������������ `_HttpClient` ��� `end()` ������ // this.injector.get(_HttpClient).end(); // ��������������������������������� - switch (event.status) { + const status = !!event.status ? event.status : 401; + switch (status) { case 200: // ��������������������������������������������������� `status` ��������� `0` ��������������������� // ��������� `error_message` ������ @@ -70,7 +82,7 @@ break; case 401: // ������������������ // this.goTo('/passport/login'); - if (location.hash && !location.hash.endsWith('login')) { + if (!this.isLoginPage) { this.unLoginHandle.next(<HttpErrorResponse>event); } break; @@ -87,13 +99,11 @@ return of(event); } } - + private get isLoginPage(): boolean { + return !!location && !!location.hash && location.hash.endsWith('login'); + } intercept(req: HttpRequest<any>, next: HttpHandler): - Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> { - if (!req.headers.get('X-Refrsh-Token')) { - const loginService = <LoginService>this.injector.get(LoginService); - loginService.refreshToken(); - } + Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> { // ��������������������������� let url = req.url; if (!url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('assets')) { @@ -107,12 +117,22 @@ return next.handle(newReq).pipe( mergeMap((event: any) => { // ������������������������������������������������������������������������������������������������HTTP������������������200������������������ - if (event instanceof HttpResponse && event.status === 200) - return this.handleData(event); + if (event instanceof HttpResponse && event.status === 200) { + // ������token��������������������������� + if (!this.isLoginPage + && !!newReq.headers + && !newReq.headers.get('X-Refrsh-Token') + && !url.startsWith('assets')) { + this.loginService.refreshToken(); + } + return this.handleData(event); + } // ������������������������������������ return of(event); }), - catchError((err: HttpErrorResponse) => this.handleData(err)) + catchError((err: HttpErrorResponse) => { + return this.handleData(err); + }) ); } } -- Gitblit v1.8.0