2017-06-26 1 views
0

私は現在認証が必要なサービスにリクエストを送信しています。私の現在の状態はそうではないので、私は401応答を得ています。私は、クライアント側で、私は私のコードでこれを扱うことができるかどうかを確認しようと活字体で書かれています:応答で401の代わりにステータスゼロを取得

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

しかし、問題はe.statusネットワークパネルから、私はそれを見ることができるにもかかわらず、ゼロであるということです応答のステータスは実際には401です。これはAngularの問題ですか、何か問題がありましたか?

これはJSON.strigify(e)の戻り値である:

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

ところで、私は角4.0.0(コアおよびHTTP)を使用しています。

これは私が原因上記送られたポスト要求にコンソールで取得していますエラーです:

(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. 

もう一つの謎が一つだけて送信があるとしながら、コンソールに報告された2つのポストの要求エラーがあるということですネットワークパネルによると。

+0

エラーをキャッチしてから転覆する理由は何ですか?なぜあなたはonErrorを購読していませんか?いくつかの副作用の値を確認しない限り、シーケンスを再起動するために使用する必要があります。その場合は.do演算子をうまく使用してください。 – LookForAngular

+0

CORSエラーが発生していますか? –

+0

@LookForAngularこのコードは、401を検出できるかどうかを確認することです。いったんやったら、別のものを返します。 – Mehran

答えて

0

あなたがあなたのサービス

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); 
      }); 
    } 
} 

のエラーの状態を知りたい場合は動詞のHTTPがPOSTで試してみることができますGETある例では、それは同じ考えです。

私はそれがあなたを助けてくれることを願っています

+0

あなたが必要とするものは、http応答のエラーのステータスコードを知っていますか? – alehn96

+0

これは現在動作しています。// .catch(this.handleError); .catch((res:Response)=> this.handleError(res); – stackdave

+0

いくつかの例では、.catch(this.handleError)のみを使用しています)?これは混乱しています – stackdave

関連する問題