Interceptor 拦截请求和响应

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,
],

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值