import {Injectable} from '@angular/core'; import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse, HttpHeaders } from '@angular/common/http'; import {catchError, finalize} from 'rxjs/operators'; import {mergeMap} from 'rxjs/operators'; import {Observable} from 'rxjs'; import {NzMessageService} from "ng-zorro-antd/message"; import {USER_TOKEN} from "../data/login/localStorage.namespace"; import {BrowserStorageService} from "./localStorage.service"; @Injectable() export class InterceptorService implements HttpInterceptor { constructor( private message: NzMessageService, private storage: BrowserStorageService, ) { } intercept(req: HttpRequest, next: HttpHandler): Observable> { let secureReq: HttpRequest; let modifiedHeaders: HttpHeaders; const token = this.storage.get(USER_TOKEN); if (token != null) { modifiedHeaders = req.headers.append('Cache-Control', 'no-cache') .append('Pragma', 'no-cache') .append('Authorization', token); } secureReq = req.clone({ url: req.url, // @ts-ignore headers: modifiedHeaders }); // @ts-ignore return next.handle(secureReq) .pipe( catchError((res: HttpResponse) => { let msg = ''; switch (res.status) { case 401: msg = '身份验证过期,请重新进入页面'; break; case 200: msg = '身份验证过期,请重新进入页面'; break; case 404: msg = '找不到地址'; break; case 403: msg = '业务错误'; break; case 500: msg = '服务器发生错误,请重试'; break; } this.jumpError(msg , res.status); return Observable.create(res); }), finalize(() => { }), mergeMap( // 有响应时成功;忽略其他事件 (event: any) => { return Observable.create((observer: { next: (arg0: any) => any; }) => observer.next(event)); }), ); } jumpError(message: string , status: number) { console.log("status" , status); // this.router.navigateByUrl('/error/500'); } }