Перехватить ошибку в любом месте angularjs

#javascript #angularjs #http

#javascript #angularjs #http

Вопрос:

Я работаю над приложением Angularjs, которое часто взаимодействует с сервером. Мне было поручено внедрить безопасность, когда раньше ее не было.

Это означает, что я изменил все вызовы API на стороне сервера, чтобы возвращать 403-несанкционированный код состояния http, когда пользователь пытается выполнить действие, которое ему не разрешено выполнять.

Теперь я МОГ бы пойти и отслеживать каждый отдельный вызов API, который приложение отправляет на сервер, и вызывать функцию, которая одинаково обрабатывает одну и ту же ошибку в каждом из них. Но я бы предпочел найти какой-нибудь способ сказать «Каждый раз, когда эта страница получает ответ 403-unauthorized, выполняйте эту функцию». Возможно ли то, о чем я спрашиваю?

Комментарии:

1. да, вы можете использовать перехватчик $ http для перехвата каждого http-вызова и обработки ваших 403-х там

2. @theTaoOfJS Вы должны дать на это ответ.

Ответ №1:

Вы можете использовать $http перехватчики. Добавив перехватчик, вы сможете перехватить ответ, чтобы проверить код состояния и сделать все, что захотите, до того, как отправитель исходного запроса получит уведомление.

Angularjs $http docs

Например:

 app.config(function ($httpProvider) {
  // it can be added by a explicit factory declaration
  // angular.module(...).factory('myHttpInterceptor', function ...
  $httpProvider.interceptors.push(function($q, $state) {
    return {
      'request': function(config) {
        return config;
      },

      'response': function(response) {
        if(response.statusCode === 403){
          $state.go('my.unauthorized.state');
          // or maybe 
          // $rootScope.$broadcast('unauthorized');
        }
        return response;
      }
    };
  });
});