Chcę poinformować użytkownika, jeśli żądanie HTTP nie powiedzie się, bez konieczności pisania dodatkowego kodu dla każdego żądania HTTP.Scentralizowana obsługa błędów HTTP w Angular 4
miałem działający prototyp dla kątowego 2:
@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);
}
}
ale ViewWrappedError został zastąpiony Kątowymi 4 przez
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;
}
, które ze względu na wywoływanie toString na httpResponse czyni go trudno przetestować kod statusu ...
Spodziewałbym się, że dostarczę publiczny, dobrze obsługiwany interfejs API do scentralizowanej obsługi błędów. Czy naprawdę nie można centralnie obsługiwać błędów HTTP innych niż analizowanie komunikatów o błędach?
Aktualizacja: Wolałbym, jeśli komponent mógł z łatwością zastąpić scentralizowaną obsługę błędów.