2017-08-23 10 views
9

HTTPエラーをよりうまく処理できるようにこのHTTPInterceptorを作成しましたが、git pullを実行してnpmをインストールする前にうまくいきました。角4 HTTPインターセプター:next.handle(...)。doは関数ではありません

これは私のコードです:

import {Injectable} from '@angular/core'; 
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse} from '@angular/common/http'; 
import {Observable} from "rxjs"; 
import {ToasterService} from "angular2-toaster"; 

@Injectable() 
export class GobaeInterceptor implements HttpInterceptor { 
    constructor(private toasterService: ToasterService){ 
    } 
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
     return next.handle(req) 
      .do(event => { 
       if (event instanceof HttpResponse) { 
        let response = event.body; 
        if(response.Error){ 
         this.toasterService.pop('error', 'Error '+response.Code, response.Message); 
        } 
       } 
      }); 
    } 
} 

そして、これは私が取得エラーです:

TypeError: next.handle(...).do is not a function at GobaeInterceptor.webpackJsonp.../../../../../src/app/services/gobae.interceptor.ts.GobaeInterceptor.intercept (gobae.interceptor.ts:12) at HttpInterceptorHandler.webpackJsonp.../../../common/@angular/common/http.es5.js.HttpInterceptorHandler.handle (

は私のコードが最近変更影響を与える可能性が何かをしましたか?私のインターセプタでhttpレスポンスを「捕まえる」ために今私は何ができるでしょうか?

+0

一体迎撃のためのプロバイダは、まだそこにちょうどプルの前と後のコードの比較または何のファイルどこプル後に変更ない方が良い場合。私はモジュールプロバイダがないと思います。またはさらにhttpclientmodule –

答えて

26

このエラーは、do演算子がないためにスローされます。以下は、do演算子を持つ観測可能オブジェクトにパッチを当ててインポートします。

import 'rxjs/add/operator/do'; 

RxJsは、デフォルトでライブラリサイズを減らすために、すべての演算子関数にバンドルされていません。個別に使用したい演算子をインポートする必要があります。

+0

私はこれを取得しています、そして私はすでに私のインターセプタファイルにそれを持っています。これはhttp呼び出しを行うユニットテストに追加する必要がありますか? (get/post/put/delete/etcを行うすべての単体テスト) – ganders

0

私はこのことからオペレータを変更することになった。これに

next.handle(req).do 

next.handle(req).subscribe 

ようです:rxjsから

  1. 演算子は、もはやデフォルトではロードされません

  2. 角度が加入し、HTTP呼び出しの観測を実施しているので、あなたは、インポートを使用する必要が

3

を行くための正しいものです。

import 'rxjs/add/operator/do'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/Observable'; 
import 'rxjs/add/observable/throw'; 
関連する問題