Skip to content

Instantly share code, notes, and snippets.

@mrister
Last active September 1, 2017 07:57
Show Gist options
  • Save mrister/d0e1eb81cab3e41b3d888116081e0ea2 to your computer and use it in GitHub Desktop.
Save mrister/d0e1eb81cab3e41b3d888116081e0ea2 to your computer and use it in GitHub Desktop.
AngularJS error handling service to be used in global error handler
import {BrowserModule} from '@angular/platform-browser';
import {ErrorHandler, Injectable, NgModule} from '@angular/core';
import {HttpErrorResponse} from '@angular/common/http';
import {AppComponent} from './app.component';
// Our service to handle errors (ideally in its own file)
@Injectable()
export class ErrorLogService {
private name: String = 'ErrorLogService';
logError(error: any) {
if (error instanceof HttpErrorResponse) {
console.error('There was an HTTP error.', error.message, 'Status code:', (<HttpErrorResponse>error).status);
} else if (error instanceof TypeError) {
console.error('There was a Type error.', error.message);
} else if (error instanceof Error) {
console.error('There was a general error.', error.message);
} else {
console.error('Nobody threw an error but something happened!', error);
}
}
}
// global error handler that utilizes the above created service (ideally in its own file)
@Injectable()
export class GlobalErrorHandler extends ErrorHandler {
constructor(private errorLogService: ErrorLogService) {
super();
}
handleError(error) {
this.errorLogService.logError(error);
}
}
// register things
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
providers: [
// register global error handler
GlobalErrorHandler,
// register global error log service
ErrorLogService
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment