2

次のようなHTTPインターセプタの実装はAngular ^4.3.6です。成功したHTTP呼び出しでAngular 4を使用して失敗したリクエストでHTTPインターセプタのステータスが0になる

import {Injectable} from "@angular/core"; 
import { 
    HttpInterceptor, 
    HttpHandler, 
    HttpRequest, 
    HttpEvent, 
    HttpResponse, 
    HttpErrorResponse 
} from "@angular/common/http"; 
import {Observable} from "rxjs/Observable"; 
import "rxjs/add/operator/do"; 

@Injectable() 
export class InterceptorService implements HttpInterceptor { 

    intercept(
    req: HttpRequest<any>, 
    next: HttpHandler 
): Observable<HttpEvent<any>> { 
    return next.handle(req).do(evt => { 
     console.log(evt);//this logs the success message properly 
     if (evt instanceof HttpResponse) { 
     //Keep going 
     } 
    },err => { 
    console.log(err); 
    //this logs the error but don't have useful info in it. 
    }); 

} 
} 

、私が最初にconsole.logに有効なevtの以下のメンバーを取得します。

ok:true 
status:200 
statusText:"OK" 
type:4 

]

しかし、失敗した私は2番目にconsole.logにerrブロックから適切なステータスコードを持っていませんが、

ZONE.js

からDEVコンソールに以下のメッセージを持っていますzone.js:2263 OPTIONS http://localhost:7001/coreRobo/neuralProcess 404(見つかりません)

name:"HttpErrorResponse" 
ok:false 
status:0 
statusText:"Unknown Error" 

私はここで何が不足しているのか分かりませんが、私は404,403または500のような有効なものを私に与えたいと思っています。

私はUIに適切なメッセージを表示し、失敗時にクライアントがパニックに陥るのを防ぐために、これらの値を必要としました。

助けを歓迎します。前もって感謝します。

+1

このエラーは何か?実際にサーバーから404,403、または500のエラーが発生していますか?サーバーにリクエスト(ネットワーク問題、DNS問題など)を送信できない場合でも、HTTPステータスコードを取得することはできません。 –

+1

@JBNizetが何かをしています。私はあなたと同じ経験をしていましたが、それはサーバーに到達できなかったためでした。それが他のものであれば、エラーはクライアント側ではなくサーバー側である可能性が高いです。 –

+1

zone.jsから記録されたブラウザのコンソールに404エラーメッセージが表示されます。サーバーの問題ではありません。これらのステータスコードを取得することはできませんか?サービスコールの後にステータスコードをキャッチしないと、インターセプタの要点は何ですか? –

答えて

1

あなたはCORSを使用している場合あなたは「アクセス制御が許起源」サーバー構成で確認する必要があります。

私が追加私のnginxのサーバー上でこれを解決:私はあなたと私と同じ問題を引き起こした「常に」パラメータを逃した

add_header "Access-Control-Allow-Origin" * always; 

を。

私の例では、ヘッダー "*"の値に注意する必要があります。

値には、許可された起点のリストが含まれている必要があります。

関連する問題