Перехват ошибок HTTP AngularJS / Angular-ui-routing для принятия мер - PullRequest
0 голосов
/ 05 октября 2018

Я разработал приложение AngularJS (SPA) с использованием Angular 1.3.14.

Я настроил маршрутизацию с помощью Angular-ui-router (0.2.15).

SPA в основном разделен на две части;(1) «сайт», который является всем, что является публичным;и (2) «приложение», которое требует действительный SessionID в заголовке.В противном случае он выдает HTTP 401.

Все работает относительно хорошо и, как и ожидалось.Это до тех пор, пока у меня есть действительный SessionID.Если мой SessionID истек (или не предоставил ни одного), возвращается HTTP 401 (как требуется).

Поскольку я использую Angular-ui-routing с опциями templateUrl и controller, всестраницы (просмотры) автоматически загружаются.

Так что я не слишком уверен, где / как я мог бы перехватить HTTP 401, чтобы соответствующим образом перенаправить на страницу Вход .Прямо сейчас они игнорируются и страницы (просмотры) не загружаются.

Я хотел бы перехватить ошибки HTTP 401 (или хотя бы одну из них) и предоставить пользователю правильное сообщение (например, «сеанс истек» или «требуется вход в систему» ​​или что-то после перенаправления наСтраница входа.

Заранее спасибо.


Обновление: 2018.10.04 21: 44

Я нашел следующее:

$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
    console.log("State change error:");
    console.log(" > Event      : ", event);
    console.log(" > toState    : ", toState);
    console.log(" > toParams   : ", toParams);
    console.log(" > fromState  : ", fromState);
    console.log(" > fromParams : ", fromParams);
    console.log(" > error      : ", error);
    //event.preventDefault();
});

Интересно, что параметр error содержит следующее:

  > error :  {data: {…}, status: 401, headers: ƒ, config: {…}, statusText: ""}

, что позволяет мне сделать это:

if (error.data.success === false) {
  console.log("Redirecting to 'Sign-in' page...");
  $state.go('sign-in');
}

Единственная проблема, которая остается, заключается в том, что яУ меня много представлений о состоянии, и хотя я могу перехватить ошибку и перенаправить, все остальные представления по-прежнему отправляются на сервер и завершаются ошибкой. Это потому, что все они отправляются параллельно? Будут копать!

...