1.定义 BaseInterceptor
import { Injectable } from '@angular/core';
import {
HttpEvent,
HttpInterceptor,
HttpErrorResponse,
HttpHandler,
HttpRequest,
HttpResponse
} from '@angular/common/http';
import { Observable, of, throwError } from 'rxjs';
import { catchError } from 'rxjs/internal/operators';
import { Router } from '@angular/router';
import { HttpStatusCode } from '../enum/basic-status.enum';
/** Pass untouched request through to the next request handler. */
@Injectable()
export class BaseInterceptor implements HttpInterceptor {
httpStatusCode = HttpStatusCode;
constructor(private router: Router) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(
catchError((err: HttpErrorResponse) => this.handleData(err))
);
}
private handleData(event: HttpResponse<any> | HttpErrorResponse): Observable<any> {
// 业务处理
switch (event.status) {
case this.httpStatusCode.Unauthorized:
this.redirectToLogin(event);
break;
}
return throwError(event);
}
private redirectToLogin(event) {
console.log(`status_code: ${this.httpStatusCode.Unauthorized}`);
localStorage.clear();
this.router.navigateByUrl('login');
return of(event);
}
}
2.依赖注入
providers: [
{provide: LocationStrategy, useClass: HashLocationStrategy},
{provide: RouteReuseStrategy, useClass: SimpleReuseStrategy},
{provide: HTTP_INTERCEPTORS, useClass: BaseInterceptor, multi: true},
MessagesService,
AuthGuardService,
],