Назад в блог

Управление HTTP-запросами и обработка ошибок с помощью перехватчиков Angular

Управление HTTP-запросами и обработка ошибок с помощью перехватчиков Angular

Если вы разрабатывали приложение с использованием AngularJS, вы, вероятно, знаете об HTTP-перехватчиках. Однако эти HTTP-перехватчики появились в Angular только в версии 4.3. В этом руководстве мы будем использовать перехватчики в Angular для обработки HTTP-запросов и ответов, а также для обработки ошибок.

Предварительные требования

Angular приложения используют Node.js среду выполнения. Для выполнения этого руководства вам понадобится установленный Node.js на вашем компьютере. К счастью, Node.js довольно легко установить. У нас есть полное руководство по теме Как установить Node.js on Ubuntu 18.04 здесь.

Кроме того, вам будет полезно знать Angular и уметь использовать Angular CLI для создания приложений Angular. Мы будем использовать Node v8.12.0 и npm v6.4.1.

Шаг 1: Создание приложения Angular

Для начала давайте создадим новое приложение Angular с помощью Angular CLI. Мы назовем наше приложение Angular-Interceptor. Запустите команду ниже, чтобы создать приложение:

Вам будет предложено сделать выбор. Введите значения по умолчанию и продолжайте:

ang cli Angular Interceptors

Затем перейдите в каталог приложения и запустите команду ниже, чтобы запустить приложение:

ng serve Angular Interceptors

Затем откройте http://localhost:4200 в вашем браузере, чтобы увидеть приложение. Теперь вы настроили базовое приложение Angular.

Шаг 2: Стилизация приложения Angular

Здесь мы будем стилизовать наше приложение Angular с помощью Angular Material. Чтобы установить Angular Material в ваш проект, запустите команду ниже:

Это установит @angular/material, @angular/cdk, и @angular/animation в ваш проект. Далее мы настроим анимацию в проекте. Добавьте BrowserAnimationsModule в ваш src/app/module.ts файл:

Мы будем использовать компонент Dialog из Angular Material. Чтобы использовать компонент Dialog, нам нужно импортировать MatDialogModule в src/app/app.module.ts файл:

Чтобы сделать интерфейс более привлекательным, давайте добавим indigo-pink.css в ваш styles.scss файл:

Шаг 3: Создание вашего Angular-перехватчика

В папке app мы создадим новую папку с именем interceptor. Внутри этой созданной папки создайте новый httpconfig.interceptor.ts файл.

Нам нужно импортировать некоторые зависимости в наш httpconfig.interceptor.ts, чтобы наш перехватчик работал. Этими зависимостями являются HttpInterceptor, HttpRequest, HttpResponse, и HttpHandler, HttpEvent, HttpErrorResponse.

Наш httpconfig.interceptor.ts файл после импорта будет выглядеть следующим образом:

Затем создайте класс HttpConfigInterceptor и реализуйте интерфейс HttpInterceptor. Вот пример:

Добавьте приведенный ниже код в httpconfig.interceptor.ts файл:

Чтобы это заработало, нам нужно импортировать httpconfig.interceptor.ts в наш app.module.ts файл:

Добавьте HttpConfigInterceptor в providers. Мы установим multi: true для обработки нескольких перехватчиков:

В следующем разделе мы создадим наш сервис для обработки ошибок.

Шаг 4: Сервис для обработки ошибок

Здесь мы будем писать код для обработки ошибок. Нам нужно будет перехватывать ошибки и соответствующим образом отображать их конечным пользователям. В двух словах, ниже описаны шаги, которым мы будем следовать:

  1. Создайте папку с именем error-dialog в app папке.
  2. Создайте сервис для ошибок с именем errorDialogService в файле с именем errordialog.service.ts.
  3. Добавьте приведенный ниже код в errordialog.service.ts :
После этого создайте новый файл с именем errordialog.component.ts. Добавьте в этот файл следующий код:
Наконец, нам нужно создать HTML-файл errordialog.component.html, для шаблона:
Нам нужно вернуться к httpconfig.interceptor.ts файлу для внесения некоторых изменений. Эти изменения позволят нам перехватывать ошибки.

Подводя итог, перечислим шаги ниже:

  1. Начните с импорта errordialog.service.
  2. Затем мы добавим конструктор для errorDialogService.
  3. Мы также добавим код для обработки ответа об ошибке с помощью catchError и throwError.
  4. Импортируйте errordialog.service и errordialog.component в AppModule.

После внесения изменений будут изменены два файла: app.module.ts и httpconfig.interceptor.ts:

Шаг 5. Создание демонстрационных сервисов

На этом шаге мы создадим два сервиса в качестве примера:

  1. Login API
  2. Customer Detail API

Создайте новую папку с именем services в папке src . Затем внутри этой только что созданной папки создайте новый файл с именем login.service.ts, и добавьте две функции:

Шаг 6. Вызов службы HTTP-клиента

Наконец, мы подошли к последней части нашего руководства. Мы будем вызывать нашу HTTP-службу из файла app.component.ts. Добавьте две функции LoginService в app.component.ts. Вызовите API login при onload, а customers/details — при onclick:

Now we have to add a UI element in app.component.html, so that the user can click it:

Чтобы завершить, вам потребуется включить LoginService в providers в AppModule:

Ниже представлен скриншот диалогового окна обработчика ошибок:

error

Заключение

В этом руководстве мы узнали, как обрабатывать HTTP-запросы и ответы с помощью интерцепторов Angular. Мы также узнали, как обрабатывать ошибки с помощью диалогового окна в Angular Material.

Приложения Angular используют Node.js в качестве среды выполнения. Если вы хотите узнать больше о Node.js и о том, как развертывать приложения Node.js с помощью Docker, ознакомьтесь с нашим руководством Как развернуть приложение Node.js (Express.js) с помощью Docker на Ubuntu 20.04. Вы также можете ознакомиться с Как выполнять производственные задачи на Ubuntu 20.04 с помощью Node.js и Установка Node.js на CentOS 8: полное руководство.

Приятной работы!

author

Pranay Kapgate

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.