Обработка ошибок необходима при создании надежных веб-приложений без ошибок. Команда разработчиков должна отслеживать все Ошибки, которые произошли на этапе производства или разработки. Для этого приложение должно иметь некоторые функции ведения журнала, такие как отправка ошибок в API.

в основном регистрация ведется вручную. мы оборачиваем нашу функциональность в блок try-catch или какой-нибудь асинхронный обратный вызов ошибки, перехватываем исключение и отправляем его на сервер.

Возможно, это решение работает, это действительно пустая трата времени, а также велик риск того, что кто-то забудет отследить ошибку.

В этой статье я покажу вам глобальный трассировщик ошибок, который Angular использует для внутренних целей, чтобы показывать нам сообщения об ошибках. Это не задокументировано в Angular Docs, и я нашел его случайно, когда копался в исходном коде Angular.

Класс обработчика ошибок

В исходном коде Angular есть класс с именем error_handler. У него есть единственная обязанность — регистрировать каждую ошибку, которая происходит внутри приложения Angular.

Всякий раз, когда внутри приложения происходит что-то не так (неверный HTTP-запрос, поле было неопределенным и т. д.), ошибка перехватывается самим Angular Core и регистрируется в консоли с использованием класса error_handler.

Класс error_handler создается Angular DI (внедрение зависимостей). поэтому Angular внедряет этот класс для себя, точно так же, как мы внедряем какой-то сервис внутри нашего Компонента. Вот почему мы могли бы предоставить собственный класс MyErrorHandler и присоединить его к провайдеру ErrorHandler.

MyErrorHandler

Давайте создадим класс с именем MyErrorHandler (имя может быть любым) и определим в нем метод handleError(error:any).

затем добавьте его в HandleError провайдера вместо родного класса error_handler.

https://gist.github.com/lukaonik/aa3ecd528459fcc83e52d5b6280a11a8

Теперь, когда Angular внедрит класс ErrorHandler, он получит наш экземпляр MyErrorHandler, и все будут вызывать нашу пользовательскую функцию вместо родной.

Расширение функциональности

мы также могли отправлять ошибки на сервер, только если мы находимся в производственной среде, и выводить ошибки в консоль, если мы находимся на этапе разработки. Все, что нам нужно сделать, это унаследовать собственный класс error_handler и вызвать его метод handleError. Если мы находимся в режиме разработки

Примечание от команды Plain English

А вы знали, что у нас четыре публикации и канал на YouTube? Вы можете найти все это на нашей домашней странице plainenglish.io — проявите свою любовь, подписавшись на наши публикации и подписавшись на наш канал YouTube!