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 Response
estado con 404
y 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 200
y 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_REFUSED
pero 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 === 0
qué sucede cuando ocurre el net::ERR_CONNECTION_REFUSED
error.
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 {
}
0 comentarios