2017-09-12 5 views
3

ich folgende Interceptor tun abfangen haben:Wie die Antwort in Winkel 4 mit HttpInterceptor

@Injectable() 
export class TokenInterceptor implements HttpInterceptor { 

    constructor(private tokenService: TokenService) { } 

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
    const token = this.tokenService.getToken(); 

    if (token) { 
     const authReq = req.clone({ 
     headers: req.headers.set('Authorization', `Bearer ${token}`) 
     }); 

     return next.handle(authReq); 
    } 

    return next 
     .handle(req) 
// 
     .getSomehowTheResponse() 
     .andSaveTheTokenInStorage() 
     .andPropagateNextTheResponse() 
    } 
} 

Und ich möchte das Token aus dem Antwort-Header im lokalen Speicher sparen, werden alle Tutorials zeigen, wie abfangen die Anfrage, aber nicht sehr deutlich die Antwort.

Antwort

4

next.handle(req) gibt einen beobachtbaren, damit Sie sie abonnieren können:

return next.handle(req).map((event: HttpEvent<any>) => { 
    if (event instanceof HttpResponse) { 
    // do stuff with response and headers you want 
    event.headers 
    event.body 
    } 
}) 

Um mehr über Mechanik hinter Abfangjäger zu lernen lesen:

+0

Ich habe einen Fehler ts 'Type 'beobachtbare ' ist nicht übertragbar 'beobachtbar >' eingeben.' –

+0

wo ist der Fehler? –

+0

Es wird in Typoskript nicht kompiliert. –

0

Sie auch brauchen Importbibliothek

import 'rxjs/add/operator/map'; 

dann verwenden Sie wie folgt. Sie müssen auch das Ereignisobjekt zurückgeben, damit es in Ihrer Funktion subscribe() empfangen werden kann.

return next.handle(req).map((event: HttpEvent<any>) => { 
     if (event instanceof HttpResponse) { 
     // do stuff with response and headers you want 
     } 
     return event; 
    });