angular4 httpclient攔截器


1.創建服務:

InterceptorService.ts

  

import { Injectable } from '@angular/core';
import { HttpEvent,HttpInterceptor,HttpHandler,HttpRequest,HttpResponse} from "@angular/common/http";
import {Observable} from "rxjs/Observable";
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
import { catchError } from 'rxjs/operators';
import { mergeMap } from 'rxjs/operators';
@Injectable()
export class InterceptorService implements HttpInterceptor{

  intercept(req:HttpRequest<any>,next:HttpHandler):Observable<HttpEvent<any>>{
    const authReq = req.clone({
      url: (req.url + '&token=ujusaruu19')  //對任意請求的url添加token參數
    });

    return next.handle(authReq).pipe(mergeMap((event: any) => {
        if (event instanceof HttpResponse && event.status != 200) {
          return ErrorObservable.create(event);
        }
        return Observable.create(observer => observer.next(event)); //請求成功返回響應
      }),
      catchError((res: HttpResponse<any>) => {   //請求失敗處理
        switch (res.status) {
          case 401:
            break;
          case 200:
            console.log('業務錯誤');
            break;
          case 404:
            break;
          case 403:
            console.log('業務錯誤');
            break;
        }
        return ErrorObservable.create(event);
      }));
  }
}

  2.導入提供器中,app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';


import { AppComponent } from './app.component';
import {InterceptorService} from "./interceptor.service";
import {HTTP_INTERCEPTORS, HttpClientModule} from "@angular/common/http";
import { TestComponent } from './test/test.component';


@NgModule({
  declarations: [
    AppComponent,
    TestComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule
  ],
  providers: [
    {provide:HTTP_INTERCEPTORS,useClass:InterceptorService,multi:true}
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

  3.結束,在組件中使用httpClient請求會自動攔截,攔截處理在InterceptorService.ts操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM