2017-06-26 5 views
0

Ich sende eine Anfrage an einen Dienst, der Authentifizierung erfordert, und da mein aktueller Status nicht ist, erhalte ich eine 401-Antwort. Ich versuche, um zu sehen, ob ich das in meinem Code verarbeiten kann, auf Client-Seite und in Maschinenschrift geschrieben:Erhalten von Status 0 anstelle von 401 in der Antwort

this.http.post(url, body, options).catch(e => { 
    if (e.status === 401) { 
     //Handle 401 
    } 
    return Observable.throw(e); 
}); 

Aber das Problem ist, dass e.status Null ist, obwohl von der Netzwerk Panel kann ich sehen Der Status der Antwort ist tatsächlich 401. Ist das ein Problem mit Angular oder habe ich etwas falsch gemacht?

Dies ist der Rückgabewert für JSON.strigify(e):

{ 
    "_body": { "isTrusted": true }, 
    "status": 0, 
    "ok": false, 
    "statusText": "", 
    "headers": {}, 
    "type": 3, 
    "url": null 
} 

BTW, ich bin mit Angular 4.0.0 (Kern und http).

Dies ist der Fehler, den ich bin wegen der Post-Anforderung in der Konsole immer oben gesendet:

(2) POST http://192.168.2.10:8080/test 401() 
XMLHttpRequest cannot load http://192.168.2.10:8080/test. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.2.10:4200' is therefore not allowed access. The response had HTTP status code 401. 

Ein weiteres Geheimnis ist, dass es 2 Post-Anforderung Fehler auf der Konsole gemeldet, während es nur eine Gesendete nach Netzwerk-Panel.

+0

Was ist der Grund, zu fangen und dann rethrow den Fehler hilft? Warum abonnierst du keinen onError? Sie sollten es verwenden, um die Sequenz neu zu starten, es sei denn, Sie möchten den Wert für einige Nebeneffekte überprüfen. Verwenden Sie in diesem Fall besser einen .do-Operator – LookForAngular

+0

Erhalten Sie einen CORS-Fehler? –

+0

@LookForAngular dieser Code ist nur zu sehen, ob ich 401 erkennen kann. Sobald ich das getan habe, würde ich etwas anderes zurückgeben. – Mehran

Antwort

0

Wenn Sie den Status des Fehlers Ihres Dienstes

import { Injectable } from '@angular/core'; 
import { Http, Response, Headers } from '@angular/http'; 
import 'rxjs/add/operator/map'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/throw'; 
import 'rxjs/add/operator/catch'; 



@Injectable() 
export class ExampleService { 

    headers: Headers; 

    constructor(private http: Http) { 
      this.headers = new Headers(); 
      this.headers.append('Content-Type', 'application/json; charset=utf-8'); 
      this.headers.append('Accepts', '*/*'); 
      // this.headers.append() 
    } 

    service1() { 

    let url = 'http://example.com/products'; 
    return this.http.get(url, this.headers).map((resp: Response) => { 
        console.log('resp status', resp.status); 
        return resp.json(); 
      }).catch((resp: Response) => { 
        let details = resp.json(); 
        console.log(resp.status); // here you get the error code in your case 401 
        return Observable.throw(details); 
      }); 
    } 
} 

im Beispiel das Verb http wissen wollen, ist, dass Sie mit POST bekommen können, um zu versuchen, ist es die gleiche Idee.

Ich hoffe, dass es Ihnen

+0

was Sie brauchen, wissen Sie den Status des Fehlers in HTTP-Antwort? – alehn96

+0

es funktioniert jetzt, // .catch (this.handleError); .catch ((res: Response) => this.handleError (res); – stackdave

+0

Warum einige Beispiele nur .catch (this.handleError) verwenden;? Es ist verwirrt – stackdave

Verwandte Themen