import { Injectable } from "@angular/core"; import { HttpClient, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse, HttpResponse, } from "@angular/common/http"; import { throwError } from "rxjs"; import { catchError, tap, finalize } from "rxjs/operators"; import { Router } from "@angular/router"; import { NzMessageService } from "ng-zorro-antd/message"; //baseurl // const baseurl = 'http://39.106.78.171:8008'; @Injectable() export class BaseInterceptor implements HttpInterceptor { constructor(private router: Router, private message: NzMessageService) {} intercept(req, next: HttpHandler) { // req.url = "/youzhan" + req.url; // req.urlWithParams = "/youzhan" + req.urlWithParams; let params = req.params; for (const key of req.params.keys()) { if (params.get(key) === undefined || params.get(key) === null) { params = params.delete(key, undefined); } } req = req.clone({ params }); // debugger // console.log('xxxxxx',req) let newReq = req.clone({ url: req.hadBaseurl ? `${req.url}` : `${req.url}`, }); if (!req.cancelToken) { /*获取token*/ let token = sessionStorage.getItem("token"); /*此处设置额外请求头,token令牌*/ if (!!token) { newReq.headers = newReq.headers.set("Authorization", `Bearer ${token}`); } } // 携带请求头发送下一次请求 return next.handle(newReq).pipe( tap( (event) => { if (event instanceof HttpResponse) { // 成功 // console.log('成功', event.headers.get('x-refresh-encryptedtoken')) if (!!event.headers.get("x-refresh-token")) { sessionStorage.setItem( "token", event.headers.get("x-refresh-token") ); sessionStorage.setItem( "encryptedAccessToken", event.headers.get("x-refresh-encryptedtoken") ); } } }, (error) => { // 失败 console.log("请求http失败", error); this.handleError(error); } ), finalize(() => { // 请求完成 // console.log('complete') }) ); } // 捕获错误 //401 token过期 403没权限!!! 400参数错误 404未找到 614刷新令牌过期!!! private handleError(error: HttpErrorResponse) { // 用户认证失败返回登录页 if (error.status === 401 || error.status === 614) { sessionStorage.clear(); localStorage.removeItem("isautologin"); this.message.create("error", `用户认证信息过期,请重新登录!`); this.router.navigate(["/singlelogin"]); } if (error.status === 403) { this.message.create("error", `对不起,您无此权限!`); } if (error.status === 400) { this.message.create("error", `请核对您的输入信息或格式是否正确!`); } if (error.status === 500) { if (error.error.error.message) { this.message.create( "error", `${error.error.error.details || error.error.error.message}` ); } else { this.message.create("error", `状态500`); } } if (error.status === 404) { this.message.create("error", `${error.error.error.message}`); } if (error.error instanceof ErrorEvent) { // 发生客户端或网络错误。相应处理。 console.error("An error occurred:", error.error.error.message); } else { // 服务端返回http状态码 // 服务端返回错误信息 console.error( `Backend returned code ${error.status}, ` + `body was: ${error.error}` ); } // 返回带有面向用户的错误信息 return throwError(error); } }