Ich möchte den Benutzer informieren, wenn eine HTTP-Anfrage fehlschlägt, ohne für jede HTTP-Anfrage zusätzlichen Code schreiben zu müssen.Zentrale Behandlung von HTTP-Fehlern in Angular 4
@Injectable()
export class MyErrorHandler extends ErrorHandler {
constructor() {
super(false);
}
handleError(error: any) {
this.tellUser(error);
super.handleError(error);
}
tellUser(error: any) {
// dig for the root cause
if (error.rejection) {
error = error.rejection;
}
if (error instanceof ViewWrappedError) {
error = error.originalError;
}
let message;
if (error instanceof Response) {
// TODO: localize and display nicely
const messages = {
0: "Could not connect to server",
}
message = messages[error.status] || ("The server reported a system error (HTTP " + error.status + ")");
} else {
message = "A system error occurred.";
}
console.warn(message);
}
}
aber die ViewWrappedError wurde in Angular 4 von
export function viewWrappedDebugError(err: any, context: DebugContext): Error {
if (!(err instanceof Error)) {
// errors that are not Error instances don't have a stack,
// so it is ok to wrap them into a new Error object...
err = new Error(err.toString());
}
_addDebugContext(err, context);
return err;
}
, die aufgrund von Aufrufen toString auf der Httpresponse, macht es ersetzt:
ich für Winkel 2 einen funktionierenden Prototyp hatte schwer, den Statuscode abzufragen ...
Ich hätte angular erwartet, um eine öffentliche, gut unterstützte API für zentralisierte Fehlerbehandlung zur Verfügung zu stellen. Gibt es wirklich keine Möglichkeit, HTTP-Fehler außer der Analyse von Fehlermeldungen zentral zu behandeln?
Update: Ich würde bevorzugen, wenn eine Komponente die zentrale Fehlerbehandlung leicht außer Kraft setzen könnte.