Powrót do bloga

Zarządzanie żądaniami HTTP i obsługa błędów za pomocą interceptorów Angulara

Zarządzanie żądaniami HTTP i obsługa błędów za pomocą interceptorów Angulara

Jeśli tworzysz aplikację przy użyciu AngularJS, prawdopodobnie wiesz o istnieniu interceptorów HTTP. Jednak te interceptory HTTP nie były dostępne w Angularze aż do wersji 4.3. W tym samouczku użyjemy interceptorów w Angularze do obsługi żądań i odpowiedzi HTTP oraz przetwarzania błędów.

Wymagania wstępne

Angular aplikacje używają środowiska uruchomieniowego Node.js. Aby ukończyć ten samouczek, musisz mieć zainstalowany Node.js na swoim komputerze. Na szczęście Node.js jest dość łatwy w instalacji. Mamy kompletny przewodnik na temat Jak zainstalować Node.js na Ubuntu 18.04 tutaj.

Dodatkowo, pomocna będzie znajomość Angulara oraz umiejętność korzystania z Angular CLI do budowania aplikacji Angular. Będziemy używać Node v8.12.0 i npm v6.4.1.

Krok 1: Utwórz aplikację Angular

Na początek utwórzmy nową aplikację Angular za pomocą Angular CLI. Nazwiemy naszą aplikację Angular-Interceptor. Uruchom poniższe polecenie, aby utworzyć aplikację:

Zostaniesz poproszony o dokonanie kilku wyborów. Wprowadź wartości domyślne i przejdź dalej:

ang cli Angular Interceptors

Następnie przejdź do katalogu aplikacji i uruchom poniższe polecenie, aby uruchomić aplikację:

ng serve Angular Interceptors

Następnie otwórz http://localhost:4200 w przeglądarce, aby zobaczyć aplikację. Skonfigurowałeś właśnie podstawową aplikację Angular.

Krok 2: Ostyluj aplikację Angular

Tutaj ostylujemy naszą aplikację Angular za pomocą Angular Material. Aby zainstalować Angular Material w swoim projekcie, uruchom poniższe polecenie:

To zainstaluje @angular/material, @angular/cdk, oraz @angular/animation w Twoim projekcie. Następnie skonfigurujemy animację w projekcie. Dodaj BrowserAnimationsModule w pliku src/app/module.ts :

Będziemy używać komponentu Dialog z Angular Material. Aby użyć komponentu Dialog, musimy zaimportować MatDialogModule w pliku src/app/app.module.ts :

Aby uczynić interfejs użytkownika bardziej atrakcyjnym, dodajmy indigo-pink.css do pliku styles.scss :

Krok 3: Zbuduj swój interceptor Angular

W folderze app utworzymy nowy folder o nazwie interceptor. Wewnątrz tego nowo utworzonego folderu utwórz nowy plik httpconfig.interceptor.ts .

Musimy zaimportować pewne zależności w naszym pliku httpconfig.interceptor.ts, aby nasz interceptor działał. Te zależności to HttpInterceptor, HttpRequest, HttpResponse, oraz HttpHandler, HttpEvent, HttpErrorResponse.

Nasz plik httpconfig.interceptor.ts po imporcie będzie wyglądał następująco:

Następnie utwórz klasę HttpConfigInterceptor i zaimplementuj interfejs HttpInterceptor. Oto przykład:

Dodaj poniższy kod do pliku httpconfig.interceptor.ts :

Aby to zadziałało, musimy zaimportować httpconfig.interceptor.ts w naszym pliku app.module.ts :

Dodaj HttpConfigInterceptor do sekcji providers. Ustawimy multi: true na true, aby obsłużyć wiele interceptorów:

W kolejnej sekcji utworzymy naszą usługę do obsługi błędów.

Step 4: Service for Handling Errors

Tutaj napiszemy kod do obsługi błędów. Będziemy musieli przechwytywać błędy i odpowiednio wyświetlać je użytkownikom końcowym. W skrócie, poniżej przedstawiono kroki, które wykonamy:

  1. Utwórz folder o nazwie error-dialog w folderze app .
  2. Utwórz usługę do obsługi błędów o nazwie errorDialogService w pliku o nazwie errordialog.service.ts.
  3. Dodaj poniższy kod w pliku errordialog.service.ts :
Następnie utwórz nowy plik o nazwie errordialog.component.ts. Wewnątrz tego pliku dodaj poniższy kod:
Na koniec musimy utworzyć plik HTML, errordialog.component.html, dla szablonu:
Musimy powrócić do pliku httpconfig.interceptor.ts w celu wprowadzenia pewnych zmian. Zmiany te pozwolą nam przechwytywać błędy.

Podsumowując, poniżej wymieniono poszczególne kroki:

  1. Zacznij od zaimportowania errordialog.service.
  2. Następnie dodamy konstruktor dla errorDialogService.
  3. Dodamy również kod do obsługi odpowiedzi o błędzie za pomocą catchError oraz throwError.
  4. Zaimportuj errordialog.service oraz errordialog.component do AppModule.

Po wprowadzeniu zmian zmodyfikowane zostaną dwa pliki: app.module.ts i httpconfig.interceptor.ts:

Krok 5: Tworzenie przykładowych usług

W tym kroku utworzymy dwie przykładowe usługi:

  1. API logowania
  2. API szczegółów klienta

Utwórz nowy folder o nazwie services w folderze src . Następnie wewnątrz tego nowo utworzonego folderu utwórz nowy plik o nazwie login.service.ts, i dodaj dwie funkcje:

Krok 6: Wywoływanie usługi klienta HTTP

Na koniec dotarliśmy do ostatniej części naszego samouczka. Będziemy wywoływać naszą usługę HTTP z pliku app.component.ts. Dodaj dwie funkcje LoginService do pliku app.component.ts. Wywołaj API logowania przy onload, a customers/details przy onclick:

Teraz musimy dodać element interfejsu użytkownika w app.component.html, aby użytkownik mógł go kliknąć:

Aby zakończyć, musisz dołączyć LoginService do providers w AppModule:

Poniżej znajduje się zrzut ekranu okna dialogowego obsługi błędów:

error

Podsumowanie

W tym samouczku dowiedzieliśmy się, jak obsługiwać żądania i odpowiedzi HTTP za pomocą interceptorów Angulara. Dowiedzieliśmy się również, jak obsługiwać błędy za pomocą okna dialogowego w Angular Material.

Aplikacje Angular używają Node.js jako środowiska uruchomieniowego. Jeśli chcesz dowiedzieć się więcej o Node.js i o tym, jak wdrażać aplikacje Node.js za pomocą Dockera, zapoznaj się z naszym poradnikiem Jak wdrożyć aplikację Node.js (Express.js) za pomocą Dockera na Ubuntu 20.04. Możesz również zapoznać się z Jak wykonywać zadania produkcyjne na Ubuntu 20.04 z Node.js oraz Instalacja Node.js na CentOS 8: kompletny przewodnik.

Miłego kodowania!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.