• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Angular http błędy

0 głosów
398 wizyt
pytanie zadane 8 stycznia 2021 w JavaScript przez michal_php Stary wyjadacz (13,700 p.)
zamknięte 8 stycznia 2021 przez ScriptyChris

Cześć.

Mam problem z pobraniem informacji w ciele odpowiedzi z serwera z kodem 400.

Component:

error => {
        console.log(error.body); // undefined
        console.log(error); // Bad Request
      }

Service http:

observe: 'events'

Za każdym razem wywala mi tylko Bad Request a nie wiem jak się dobrać do tego jaki message walidacji wywala mi serwer z góry dziękuje za wskazówkę.

komentarz zamknięcia: Problem rozwiązany w komentarzach
1
komentarz 8 stycznia 2021 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
a czemu tego szukasz na fronendzie a nie na backendzie?
komentarz 8 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)

Bo back-end wysyła mi ładną wiadomość. Jak wejdę na przykład w Networkingu na dane zapytanie to widzę odpowiedź od niego w stylu:

"incorrect_token"

Ale nie wiem jak się do tego dobrać.

Posiadam też ogólny plik: 

export class ErrorInterceptor implements HttpInterceptor 

I w nim jak zrobię sobie consol.loga to widzę już widzę ciało.

1
komentarz 8 stycznia 2021 przez Tomek Sochacki Ekspert (227,510 p.)
a co robisz w tym ErrorInterceptor, bo moze po prostu wycinasz tam świadomie część obiektu błędu? i czym jest to "console.log(error); // Bad Request", co dokladnie siedzi w zmiennej error?
komentarz 8 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)

a co robisz w tym ErrorInterceptor

To jest klasa, której sprawdzam ciągle nagłówki czy serwer nie zwrócił mi 401 wygląda tak:

export class ErrorInterceptor implements HttpInterceptor {

  constructor(private authenticationService: AuthenticationServiceService) {}

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    return next.handle(req).pipe(catchError(err => {

      if (err.status === 401) {
        this.authenticationService.logout();
        location.reload(true);
      }

      const error = err.error.message || err.statusText;
      return throwError(error);
    }));
  }
}

  czym jest to "console.log(error); // Bad Request

error to jest odpowiedź z mojego componetu wysyłającego tokeny.

error po wy konsolowaniu posiada tylko  Bad Request. Ale w ciele odpowiedzi widać, że posiada jeszcze body -> message i masę innych informacji.

2
komentarz 8 stycznia 2021 przez Tomek Sochacki Ekspert (227,510 p.)

no ok, ale tutaj widać:

const error = err.error.message || err.statusText;
      return throwError(error);

że w przypadku błędu (który łapiesz przez catchError) zwracasz jako error nie jakiś obiekt, tylko po prostu stringa, prawdopodobnie tutaj pole message albo statusText to po prostu string "Bad Request" i zgodnie z oczekiwaniami taka wartość leci dalej do komponentu/serwisu itp., miejsca, gdzie obsługujesz ten endpoint. Dlaczego świadomie przerzucasz dalej tylko stringa w zmiennej error?

1
komentarz 8 stycznia 2021 przez Tomek Sochacki Ekspert (227,510 p.)
Spróbuj przerzucać tutaj dalej po prostu cały error i zobacz co wtedy masz w serwisie/komponencie
komentarz 8 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)

Racja moje niedopatrzenie zapomniałem, że tam przecież ucinam wszystko na tej klasie ErrorInterceptor.

Dziękuje za pomoc.

Aż chciało by się powiedzieć wiszę piwo laugh 

1
komentarz 8 stycznia 2021 przez Tomek Sochacki Ekspert (227,510 p.)
spoko :) czasem warto dać kod do zobaczenia komuś w boku, ile to już razy człowiek czytał kod nie widząc błędów, a ktoś z boku w 5 sekund znajduje przyczynę, i uwierz mi, że dotyczy to tak juniora jak i czasem seniorów :) szczególnie, gdy czasami nawet error logi są nie do końca jasno wskazujące na problem...

a tak na marginesie to też kiedyś naciąłem się na problem w interceptorze angulara, który był napisany wieki temu przy pierwszym tworzeniu apki, chodziło tam o drobny corner case io rozwiązanie "na chwilę"... i dopiero po długiej chwili w ogóle zorientowałem się, że ten interceptor jeszcze w ogóle istnieje, choć dawno nie powinien :)

Podobne pytania

0 głosów
1 odpowiedź 265 wizyt
pytanie zadane 23 kwietnia 2021 w JavaScript przez Mitop Użytkownik (700 p.)
+1 głos
2 odpowiedzi 404 wizyt
pytanie zadane 3 kwietnia 2021 w JavaScript przez Jakub 0 Pasjonat (23,120 p.)

93,731 zapytań

142,669 odpowiedzi

323,286 komentarzy

63,291 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...