2016-11-23 9 views
4

Alle meine Backend-API-Anfragen geben neue Token-Informationen in den Headern zurück, selbst wenn sie Ausnahmen auslösen. In der nächsten Anfrage muss ich diese neuen Tokeninformationen senden.Angular 2 - Header aus HTTP-Anfragen abrufen

Also ich versuche, dass eine eindeutige und standardisierte Möglichkeit, um herauszufinden, zu tun, also ich versuche:

let requestOptions = new RequestOptions(Object.assign({ 
     method: method, 
     url: environment.apiHost + url, 
     body: body, 
     headers: authenticatedRequest ? this.requestService.getAuthHeaders() : this.requestService.getJsonHeaders(), 
     withCredentials: authenticatedRequest 
    })); 

this.http.request(new Request(requestOptions)) 
     .map((res:Response) => { this.storageService.setAuthInfo(res.headers); res.json() }) 
     .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 

Das Problem, das ich mit Blick auf bin, ist, dass, wenn ich subscribe dieses Verfahren res Variable gibt undefined zurück.

Was schlagen Sie mir vor?

Antwort

3

Das Problem ist, dass Sie eine Antwort res.json() explizit von Ihrer map Funktion zurückgeben müssen, wie Sie {} verwendet haben.

this.http.request(new Request(requestOptions)) 
    .map((res:Response) => { 
     this.storageService.setAuthInfo(res.headers); 
     return res.json(); 
    }) 
    .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 

ähnlicher answer here

+0

sehr vielen Dank! –

+0

Es löste das damit verbundene Problem, aber ich stehe vor einem neuen: Wenn ein Fehler auftritt, wird er nicht von map() übergeben, so dass er keine neuen Tokens registriert. Die Lösung wäre ein neues Token ('this.storageService.setAuthInfo (res.headers);') auf catch() auch gesetzt, es sei denn, es gibt eine Anfrage-Methode, die bei Erfolg und Fehlerrückgabe aufgerufen wird. Irgendeine Idee? –

+0

@PaspRuby Ich würde sagen, es lohnt sich, neue Frage zu öffnen, andere Leute können auch mit Gedanken springen .. –