14

サーバーが提供する JSON サービスを使用するフロント エンドを開発しています。

私は Angular2 の HTTP を喜んで使用しており、.catch()オペレーターを介してエラーをキャッチできます。

特定のサービスに関連する問題 (たとえば、サービスがサーバーによって定義されていない) を見つけた場合、catch()オペレーターはResponsewith ステータス404を受け取り、状況を簡単に管理できます。

一方、サーバーが完全にダウンしている場合、catch()オペレーターはステータス コードを含む応答を受け取ります200が、問題の原因 (サーバー全体がダウンしている) に関連する特定の兆候やテキストはありません。コンソールで、angular ( http.dev.js ) がメッセージを書き込んでいるnet::ERR_CONNECTION_REFUSEDことがわかりますが、コード内から同様のことを行う (つまり、何が起こっているのかを理解し、適切に反応する) 方法がわかりません。

どんな助けでも大歓迎です。

4

3 に答える 3

8

アプリケーションでこのイベントをグローバルに処理したい場合は、Nicolas Henneau の回答を少し変更して使用することをお勧めしますhttps://stackoverflow.com/a/37028266/1549135

基本的に、エラーが発生error.status === 0したときに何が起こるかを確認できます。net::ERR_CONNECTION_REFUSED

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

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 {
}
于 2016-12-02T13:27:38.150 に答える
1

angular2.0.0-beta.15を使用しているときに同じ問題があります

これはバグのようです。http ステータス 200 が表示されますが、これは正しくありません。

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

于 2016-04-20T10:14:21.603 に答える