Angular2 HTTP – Cómo ver que el servidor backend está inactivo





Estoy desarrollando una interfaz que consume servicios JSON proporcionados por un servidor.

Felizmente uso HTTP de Angular2 y puedo detectar errores a través del .catch()operador.

Si encuentro un problema relacionado con un servicio específico (por ejemplo, el servicio no está definido por el servidor), el catch()operador recibe un Responseestado con 404y puedo manejar la situación fácilmente.

Por otro lado, si es el servidor el que está completamente caído, el catch()operador recibe una Respuesta con código de estado 200y ningún signo o texto específico relacionado con la causa del problema (que es que todo el servidor está caído). En la consola veo que angular ( http.dev.js ) escribe un mensaje net::ERR_CONNECTION_REFUSEDpero no sé cómo hacer algo similar (es decir, entender lo que está sucediendo y reaccionar adecuadamente) desde mi código.

Cualquier ayuda sería apreciada.

 


 

Solución para ver que el servidor backend está inactivo Angular2 HTTP

 

Básicamente, puede verificar error.status === 0qué sucede cuando ocurre el net::ERR_CONNECTION_REFUSEDerror.

El archivo del módulo completo:





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

}

Archivo de módulo:

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 {
}

 





Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *