Obsługa błędów w Angular

0

Witam.

Mam pewna watpliwosc odnosnie obslugi bledow. Do tej pory malo bawilem sie w obsluge bledow, takze prosze o zrozumienie.
Mam program pobierajacy i modyfikujacy liste zakupow z serwera.
Potrzebny fragment kodu jest nastepujacy:

w pliku repozytorium.model.ts:

this.zrodloDanych.usunZakup(zakup.id).subscribe(() => {

        console.log("W subscribe");

        ...

      });

w pliku: rest.zrodlodanych.ts

usunZakup(id: number) {

    console.log("W rest");

    return this.wyslijZadanie(RequestMethod.Delete, `${this.url}/${id}`);

  }

w pliku: rest.zrodlodanych.ts:

wyslijZadanie(verb: RequestMethod, url: string, body?: Zakup): Observable<Zakup> {

    console.log("W wyslij zadanie");

    return this.http.request(new Request({
      method: verb,
      url: url,
      body: body
    })).map(odpowiedz => odpowiedz.json())
      .catch((error: Response) => Observable.throw(`Błąd sieci: ${error.statusText} (${error.status})`));
  }

Gdy nacisne przycisk generujacy blad(podaje id rowne -1), wywoluje this.zrodloDanych.usunZakup(zakup.id) i dalej juz widac.

W konsoli pojawiaja sie takie komunikaty:

W rest
W wyslij zadanie
zone.js:3243 DELETE http://localhost:2500/zakupy/-1 404 (Not Found)
core.js:1449 ERROR Błąd sieci: Not Found (404)

I ten ostatni blad jest obsluzony przeze mnie, jak widac w kodzie. A pierwszy, DELETE w tresci to jest odpowiedz serwera, czy blad serwera? W skrocie, czy jesli tutaj skupiam sie na obslugiwaniu bledow, to mam sie nim przejmowac jako bledem, czy juz wszystko co powinno byc obsluzone, jest obsluzone? Jesli mam go obsluzyc, to jak i gdzie, bo jakos tego nie widze. Dziekuje.

0

To zależy, w jaki sposób chcesz przedstawić uzytkownikowi komunikat błędu. Jak chcesz to gdzieś wyświetlić w komponencie - musisz tą informację przekazać do komponentu. Jeżeli wystarczy wyświetlenie jakiegoś toasta możesz to spipe'owac catchErrorem i go wyświetlić.

Error musisz jakoś użytkownikowi przedstawić, więc nie wystarczy wypisanie tego w konsoli. Druga sprawa, taki błąd w konsoli może być potem mylący dla developera, więc raczej bym to obsłużył tak żeby nie zostało nic wyświetlane w konsoli.

Korzystasz z HttpClienta? Tam masz odpowiednie metody to wysyłania żądań Http requestow, w tym delete. Tak samo nie korzysta się z operatorów w ten sposób, do tego służy metoda pipe wywoływana na observable.

0

Z tego co pamiętam wygodnym podejściem jest interceptor który filtruje odpowiedzi o sprawdza status http.

0

W jaki sposób miałoby to być wygodne? Skoro interceptor przechwytuje każdy request, to filtrowanie w nim błędów wiązałoby się z tym, ze na podstawie url i metody Http, musiałbyś zdecydować co zrobić.

No chyba że masz jakiś komponent który jest odpowiedzialny stricte za wyświetlanie błędów, komunikujący się przez jakiś subject i nie będziesz miał sytuacji w której w kilku różnych miejscach na stronie będziesz musiał wyświetlić błąd. Imo - mało "rozwijalne" podejście do obsługi błędów.

0

W tej chwili blad wyswietla mi sie tylko w komponencie, jesli sie pojawi, a tak chcialem, ale odpowiedz serwera:

DELETE http://localhost:2500/zakupy/-1 404 (Not Found) zone.js:3243

wystepuje wciaz.
Czy ktoras z tych dwoch metod przez Was przedstawiona potrafi obsluzyc te odpowiedz? Bo troche szukalem w Internecie i nigdzie nic nie jest napisane o tej odpowiedzi, ktora mam tutaj, tak, aby dzialalo lepiej niz to, co juz opisalem. Wszedzie predzej czy pozniej okazuje sie, ze nie przechwytuje tej akurat odpowiedzi.
Moze tu asynchronicznosc cos szkodzi, albo cos innego.
Nie wiem tez jak ja nazywac, odpowiedz serwera ze statusem 404 czy jak precyzyjniej, zeby wyszukac. Moze to jest dla wszystkich oprocz mnie oczywiste, ze jej nie powinno byc, albo oczywiste jak ja obsluzyc,. Nie wiem do konca czemu sie wyswietla ta odpowiedz, skoro juz dostaje blad( ktory potrafie obsluzyc, i widac po nim o co chodzi)ona jest po prostu nadmiarowa.
Dzieki za zainteresowanie tematem!

1 użytkowników online, w tym zalogowanych: 0, gości: 1