Обработка ошибок необходима при создании надежных веб-приложений без ошибок. Команда разработчиков должна отслеживать все Ошибки, которые произошли на этапе производства или разработки. Для этого приложение должно иметь некоторые функции ведения журнала, такие как отправка ошибок в 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!