Korrekte Methode zum Umleiten von $ http.post in angularjs

8

Können Sie mir sagen, wie Sie auf eine andere Seite umleiten können, wenn $ http.post einen bestimmten Fehlercode zurückgibt.

Um einen Kontext hinzuzufügen, möchte ich auf eine andere Seite umleiten, wenn der Benutzer nicht eingeloggt oder zur Verwendung der API berechtigt ist.

%Vor%     
Robben_Ford_Fan_boy 21.10.2016, 21:34
quelle

7 Antworten

2

Die $ http.post ist fehlgeleitet. Bis jetzt ist die beste Antwort @ Kliment's. Interzeptoren sind der beste Weg, um zu verwalten, was vor und nach HTTP-Anfragen kommt.

Wenn Ihr Endziel jedoch darin besteht, den Zugriff auf eine Seite zu verhindern, müssen Sie mindestens ein Routing-Plug-in verwenden (ngRoute, ui-router ) weil es bei der Versprechensidee immer eine Verzögerung zwischen der HTTP-Anfrage und der Antwort geben wird.

Abhängig von der Antwortzeit des Servers wird die Seite immer noch für etwa eine Sekunde angezeigt.

Mit ui-router konfigurieren Sie einfach eine Lösung Methode für jeden Staat, den Sie schützen möchten. Es könnte so aussehen:

%Vor%

eingeloggt bezieht sich auf eine von Ihnen definierte Funktion, die Ihren $ http.post-Aufruf (oder besser noch einen Dienst) enthält

%Vor%

Hier gibt dieser bestimmte Dienst einen 401-Status zurück, aber Sie können alles zurückgeben.

Der Status wird nicht aufgelöst (und die Seite wird nicht angezeigt), bis er akzeptiert oder abgelehnt wird.

Sie können direkt von dort weiterleiten, wenn Sie möchten, obwohl es nicht sehr elegant ist. UI-Router bietet Ihnen eine andere Option mit Standardumleitung:

%Vor%

Mit sonst weisen Sie Ihren Router an, zu bestimmten URLs zu gehen, wenn für eine bestimmte Anfrage kein Status existiert oder wenn eine Lösung abgelehnt wurde.

Zu einem anderen Thema ist Ihre Ссылка schlecht geschrieben.

.success und .error sind veraltet, und Sie müssen keine Zusage ( $ q ) über eine $ http-Anforderung erstellen das selbst gibt schon ein Versprechen zurück.

Sie haben ein gutes Beispiel in der oben verlinkten Dokumentation.

    
gyc 26.10.2016, 17:33
quelle
3

Der beste Weg, um globale AuthenticationError im Winkel zu finden, ist der Interceptor. Auf diese Weise können Sie alle Anfragen überwachen, die von angular gesendet werden und auf AuthenticationError prüfen.

%Vor%     
Kliment 25.10.2016 12:39
quelle
3

Beispiel:

%Vor%     
Simanchal.panigrahi 27.10.2016 05:12
quelle
3

Verwenden Sie einen Interceptor-Dienst, um alle Ablehnungsanforderungen im selben Dienst zu zentralisieren.

%Vor%     
Nicolas Law-Dune 27.10.2016 08:12
quelle
2

Sie könnten eine Umleitung zu der Seite mit $ window.location.href durchführen, basierend auf der Fehlerbedingung, die Sie haben.

%Vor% %Vor%
    
Sreekanth 23.10.2016 21:56
quelle
2

Sie können die Seite auf einen nicht autorisierten Zugriff eines Benutzers umleiten, basierend auf dem Statuscode, den Sie von Ihrem API-Aufruf zurückgeben können.

%Vor%     
Chiru Adi 28.10.2016 10:30
quelle
2

Zuerst eine nette Frage, in diesem Szenario können Sie $ location , $ state Wenn es eine externe URL ist, verwenden Sie $ window.location.href .. Ich würde $ location empfehlen und es ist der beste Weg ...

Siehe den Link für weitere Verwenden von $ window oder $ location to Redirect in AngularJS

%Vor%

Verwenden Sie vorzugsweise $ location oder $ state ...

    
Gopinath 25.10.2016 05:47
quelle

Tags und Links