2017-09-22 17 views
-1

Angular4アプリケーション用の単純なHTTPインターセプタを作成して、ローダの回転をオフにしたり、多少のログを記録したり、ある時点でキャッシングしたりするような基本的な処理を行っています。ここでAngular2インターセプタでのエラー処理

は、私がこれまで持っているものです。

import { Injectable } from '@angular/core'; 
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from 
'@angular/common/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/do'; 
import { HttpResponse } from '@angular/common/http'; 
import { LoadingOverlayService } from '../../../services/loadingoverlay/loadingoverlay.service'; 
import { MdSnackBar } from '@angular/material'; 

@Injectable() 
export class MainInterceptor implements HttpInterceptor { 
request: HttpRequest<any>; 

constructor(public loadingOverlay: LoadingOverlayService, public snackBar: MdSnackBar) { 

} 

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
    this.request = req; 
    let options = this._dealwithOptions(); 

    if (!options.disableOverlay) 
     this.loadingOverlay.sync(true); 

    const started = Date.now(); 
    return next.handle(this.request) 
     .do(event => { 
      console.log(event); 
      if (event instanceof HttpResponse) { 
       console.log(HttpResponse); 
       const elapsed = Date.now() - started; 
       console.log(`Request for ${req.urlWithParams} took ${elapsed} ms.`); 

       if (!options.disableOverlay) 
        this.loadingOverlay.sync(false); 
      } 
     }); 
} 

_dealwithOptions() { 
    let rtrn: any = {}; 

    var options = this.request.headers.get('requestoptions'); 
    if (options != null) { 
     rtrn = JSON.parse(options); 
     this.request = this.request.clone({ headers: this.request.headers.delete('requestoptions') }); 
    } 

    return (rtrn); 
} 
} 

LoadingOverlayServiceは、オーバーレイHTMLを持つコンポーネントにメッセージをオンまたはオフオーバーレイを渡すために私自身のサービスです。

サーバーからのエラーが発生するまで、すべて正常に動作します。インタセプタのエラーイベントをキャプチャ、読み取り、渡すにはどうすればよいですか? .do()

答えて

関連する問題