2017-08-23 20 views
9

मैंने http HTTP त्रुटियों को बेहतर तरीके से संभालने में सक्षम होने के लिए यह HTTPInterceptor बनाया है, यह एक गिट खींचने से पहले अच्छी तरह से काम कर रहा था और एनपीएम इंस्टॉल चला गया।कोणीय 4 एचटीपी इंटरसेप्टर: next.handle (...)। कोई फ़ंक्शन नहीं है

यह मेरा कोड है:

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'; 

आरएक्सजेएस लाइब्रेरी आकार को कम करने के लिए डिफ़ॉल्ट रूप से सभी ऑपरेटर फ़ंक्शंस के साथ बंडल नहीं किया जाता है। आपको उन ऑपरेटरों को आयात करने की आवश्यकता है जिन्हें आप अलग-अलग उपयोग करना चाहते हैं।

next.handle(req).subscribe 

ऐसा नहीं है कि लगता है::

next.handle(req).do 
इस के लिए

:

+0

मुझे यह मिल रहा है, और मेरे पास पहले से ही मेरी इंटरसेप्टर फ़ाइल में है। क्या इसके बाद किसी भी यूनिट परीक्षण में जोड़ा जाना चाहिए जो http कॉल करता है? (उर्फ हर यूनिट परीक्षण जो मिलता/पोस्ट/डाल/हटा/आदि करता है) – ganders

0

मैं इस से ऑपरेटर बदलने के समाप्त हो गया

  1. rxjs से

    ऑपरेटर्स डिफ़ॉल्ट रूप से अब लोड नहीं होतीं

  2. कोणीय क्योंकि एचटीटीपी कॉल पर observables लागू किया गया है, सदस्यता

3

आप आयात का उपयोग करना पड़ जाने के लिए सही एक है।

import 'rxjs/add/operator/do'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/Observable'; 
import 'rxjs/add/observable/throw'; 
संबंधित मुद्दे