docs
angular
Exceptions
ApiError

Descrição

Exporta uma classe ApiError que representa um erro retornado por uma API. A classe tem três atributos: message, code e statusCode.

  • O atributo message é uma mensagem de erro legível por humanos que descreve o erro. Ele é obtido do objeto apiErrosTranslate que contém pares chave-valor de códigos de erro e mensagens.

  • O atributo code é uma string que representa o código de erro retornado pela API.

  • O atributo statusCode é um número que representa o código de status HTTP retornado pela API.

Se o parâmetro de código passado para o construtor não for encontrado no objeto apiErrosTranslate, uma mensagem de erro padrão será usada.

Uso

Para usar essa classe, importe-a para seu arquivo e crie uma nova instância dela com o código de erro e o código de status HTTP retornados pela API. Por exemplo:

import { ApiError } from '@burand/angular';
 
const errorCode = 'auth/wrong-password';
const httpStatusCode = 401;
 
const apiError = new ApiError(errorCode, httpStatusCode);
console.log(apiError.message); // "O e-mail ou senha está inválido."
console.log(apiError.code); // "auth/wrong-password"
console.log(apiError.statusCode); // 401

Este é um interceptor HTTP do Angular responsável por capturar erros de chamadas à API e transformá-los em objetos ApiError personalizados.

// core/interceptors/api-error.interceptor.ts
 
import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { ApiError } from '@burand/angular';
import { environment } from '@environment';
import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
 
@Injectable()
export class ApiErrorInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(
      catchError(err => {
        if (!request.url.startsWith(environment.urlApi)) {
          throw err;
        }
 
        if (err instanceof HttpErrorResponse && err.error.code && err.error.message) {
          throw new ApiError(err.error.code, err.status);
        }
 
        throw err;
      })
    );
  }
}

Você também pode verificar o objeto ApiError em um bloco try-catch para exibir a mensagem de erro ao usuário.

import { ApiError } from '@burand/angular';
 
try {
  // Make API request
} catch (error) {
  if (error instanceof ApiError) {
    console.log(error.message); // Display error message to user
  } else {
    console.log('An unknown error occurred.'); // Handle other errors
  }
}