refactor: use RFC 7807 standard for error handling
All checks were successful
Build and Deploy Angular App / build (push) Successful in 1m30s

This commit is contained in:
Polianin Nikita 2024-12-22 07:17:21 +03:00
parent 10bf53adec
commit eda6ca4b1a

View File

@ -158,7 +158,7 @@ export default abstract class ApiService {
private handleError(error: HttpErrorResponse): void { private handleError(error: HttpErrorResponse): void {
// todo: change to Retry-After condition // todo: change to Retry-After condition
if (error.error && error.error.toString().includes("setup")) { if (error.error && error.error.detail.includes("setup")) {
this.router.navigate(['/setup/']).then(); this.router.navigate(['/setup/']).then();
return; return;
} }
@ -168,38 +168,40 @@ export default abstract class ApiService {
if (error.error instanceof ErrorEvent) { if (error.error instanceof ErrorEvent) {
title = `Произошла ошибка: ${error.error.message}`; title = `Произошла ошибка: ${error.error.message}`;
} else { } else {
switch (error.status) { if (error.error && error.error.type && error.error.title) {
case 0: title = error.error.title || `Ошибка с кодом ${error.status}`;
title = 'Неизвестная ошибка. Пожалуйста, попробуйте позже.'; message = error.error.detail || 'Неизвестная ошибка';
break; } else {
case 400: switch (error.status) {
title = 'Ошибка запроса. Пожалуйста, проверьте отправленные данные.'; case 0:
break; title = 'Неизвестная ошибка. Пожалуйста, попробуйте позже.';
case 401: break;
this.router.navigate(['/login/']).then(); case 400:
title = 'Ошибка авторизации. Пожалуйста, выполните вход с правильными учетными данными.'; title = 'Ошибка запроса. Пожалуйста, проверьте отправленные данные.';
break; break;
case 403: case 401:
title = 'Отказано в доступе. У вас нет разрешения на выполнение этого действия.'; this.router.navigate(['/login/']).then();
break; title = 'Ошибка авторизации. Пожалуйста, выполните вход с правильными учетными данными.';
case 404: break;
title = 'Запрашиваемый ресурс не найден.'; case 403:
break; title = 'Отказано в доступе. У вас нет разрешения на выполнение этого действия.';
case 500: break;
title = 'Внутренняя ошибка сервера. Пожалуйста, попробуйте позже.'; case 404:
break; title = 'Запрашиваемый ресурс не найден.';
case 503: break;
title = 'Сервер на обслуживании. Пожалуйста, попробуйте позже.'; case 500:
break; title = 'Внутренняя ошибка сервера. Пожалуйста, попробуйте позже.';
default: break;
title = `Сервер вернул код ошибки: ${error.status}`; case 503:
break; title = 'Сервер на обслуживании. Пожалуйста, попробуйте позже.';
break;
default:
title = `Сервер вернул код ошибки: ${error.status}`;
break;
}
} }
if (error.error?.Error)
message = error.error.Error; if (!message)
else if (error.error instanceof String)
message = error.error.toString();
else
message = error.error.statusMessage; message = error.error.statusMessage;
} }
this.notify.error(message == '' ? undefined : message, title); this.notify.error(message == '' ? undefined : message, title);