2016-02-24 1 views
6

であることを理解することが、私は、サーバーが提供するJSONサービスを消費フロントエンドを開発しています。はAngular2 HTTP - どのようにバックエンドサーバがダウンし

私は喜んAngular2のHTTPを使用して、私は.catch()オペレータ経由のエラーをキャッチすることができます。

catch()オペレータは、404というステータスのResponseを受信して​​います。このサービスを使用すると、状況を簡単に管理できます。一方

、それはcatch()オペレータがステータスコード200とサーバ全体であることがある問題(の原因に関連した特定の記号又はテキストで応答を受信し、完全に停止しているサーバがある場合ダウン)。私のコード内から(すなわち、何が起こっているかを理解し、適切に反応)私は、角(http.dev.js)ことがわかりコンソールで は、メッセージnet::ERR_CONNECTION_REFUSEDを書き込みますが、私は似た何かをする方法がわかりません。

ご協力いただければ幸いです。

+0

あなたは、このためのソリューションを見つけますか?私は(GET、例えばPOST)のHTTP操作でエラーをキャッチし、エラーステータスが200の場合、私は、全体のサーバがダウンしている '民間handleErrorの(:レスポンスエラー)のようなものを想定し –

+0

....また、ここに私の答えを参照してください。 { lerエラー。 if(error.status == 200){ errorText = 'サーバー全体が停止しています。接続が拒否されました。 '; }戻りObservable.throw(ERRORTEXT || 'サーバーエラー')。 } ';このメソッドが本当に問題ないことを確認することからは遠いですが、私が直面しているケースではうまくいくようです – Picci

+0

良い回避策のようです。しかし、この問題を解決してアップグレードすると、コードが壊れることに気づくべきです。したがって、あなたが –

答えて

1

angular2.0.0-beta.15

を使用している間、私はこれはバグであるように思え同じ問題を抱えています。あなたはHTTPステータス200を取得し、これは正しくありません:

https://github.com/angular/http/issues/54

+1

ところでリンクは今日の時点では壊れている、この回避策を使用する 'TODO'毎回を置くのは良い考えかもしれません – superjos

4

あなたは私がすることができます基本的にはわずかに変更されたニコラスHenneauxの答えhttps://stackoverflow.com/a/37028266/1549135

を使用することをお勧めします、あなたのアプリケーションでグローバルにこのイベントを処理したい場合net::ERR_CONNECTION_REFUSEDエラーが発生した場合に発生するerror.status === 0を確認してください。

完全なモジュールファイル:

import { Request, XHRBackend, BrowserXhr, ResponseOptions, XSRFStrategy, Response } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/add/observable/throw'; 

export class AuthenticationConnectionBackend extends XHRBackend { 

    constructor(_browserXhr: BrowserXhr, _baseResponseOptions: ResponseOptions, _xsrfStrategy: XSRFStrategy) { 
    super(_browserXhr, _baseResponseOptions, _xsrfStrategy); 
    } 

    createConnection(request: Request) { 
    let xhrConnection = super.createConnection(request); 
    xhrConnection.response = xhrConnection.response.catch((error: Response) => { 
     if (error.status === 0){ 
     console.log("Server is down...") 
     } 
     ... 
     return Observable.throw(error); 
    }); 
    return xhrConnection; 
    } 

} 

モジュールファイル:

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { CommonModule } from '@angular/common'; 
import { HttpModule, XHRBackend } from '@angular/http'; 
import { AppComponent } from './app.component'; 
import { AuthenticationConnectionBackend } from './authenticated-connection.backend'; 

@NgModule({ 
    bootstrap: [AppComponent], 
    declarations: [ 
     AppComponent, 
    ], 
    entryComponents: [AppComponent], 
    imports: [ 
     BrowserModule, 
     CommonModule, 
     HttpModule, 
    ], 
    providers: [ 
     { provide: XHRBackend, useClass: AuthenticationConnectionBackend }, 
    ], 
}) 
export class AppModule { 
}