File size: 2,580 Bytes
27e40c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import { Injectable, ErrorHandler, Injector } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';
import { Router } from '@angular/router';

@Injectable({
  providedIn: 'root',
})
export class GlobalErrorHandlerService implements ErrorHandler {

  constructor(private injector: Injector) {}

  handleError(error: any): void {
    // Log the error to the console
    console.error('An error occurred:', error);

    // Differentiate between error types
    if (error instanceof HttpErrorResponse) {
      // Handle HTTP errors
      this.handleHttpError(error);
    } else if (error instanceof TypeError) {
      // Handle client-side errors (TypeErrors)
      this.handleClientError(error);
    } else if (error instanceof Error) {
      // Handle generic JavaScript errors
      this.handleGenericError(error);
    } else {
      // Handle any other type of error
      this.handleUnknownError(error);
    }

    // Always log the error, could be to a server or external logging service
    this.logError(error);
  }

  private handleHttpError(error: HttpErrorResponse): void {
    // Customize the message for different status codes
    let errorMessage = 'An unexpected error occurred. Please try again later.';
    switch (error.status) {
      case 400:
        errorMessage = 'Bad Request: Please check your input.';
        break;
      case 401:
        errorMessage = 'Unauthorized: Please log in again.';
        break;
      case 404:
        errorMessage = 'Not Found: The requested resource was not found.';
        break;
      case 500:
        errorMessage = 'Internal Server Error: Please try again later.';
        break;
      case 503:
        errorMessage = 'Service Unavailable: Please try again later.';
        break;
      default:
        errorMessage = `Unexpected Error: ${error.message}`;
        break;
    }
    // Optionally, display the error to the user
    alert(errorMessage);
  }

  private handleClientError(error: TypeError): void {
    // Handle client-side errors
    alert('A client-side error occurred. Please try again.');
  }

  private handleGenericError(error: Error): void {
    // Handle generic JavaScript errors
    alert('An unexpected error occurred. Please try again later.');
  }

  private handleUnknownError(error: any): void {
    // Handle unknown errors
    alert('An unknown error occurred. Please try again later.');
  }

  private logError(error: any): void {
    // Implement your logging logic here, e.g., send the error to a server
    console.error('Logging the error:', error);
  }
}