Árvore de páginas

A definição de um interceptor para requisições HTTP pode se mostrar útil para:

  • identificação de time out de sessão no servidor;

  • realizar o controle de requisições ao servidor para que seja disposta a tela de carregamento;

  • capturar os retornos das requisições ao servidor e tratar as exceções e/ou rejeições. 

Definição

Para construção de um HTTP Interceptor basta implementar um AngularJS Factory no qual será injetado o $q. A implementação em si deve no mínimo retornar uma função na qual estejam sobrescritos as funções:

  • request: function (config)
  • requestError: function (rejection)
  • response: function (response)
  • responseError: function (rejection)

Exemplo
appHTTPInterceptors.$inject = ['$q'];
function appHTTPInterceptors($q) {

	...

    return {
        request: function (config) {
            return config || $q.when(config);
        },
        requestError: function (rejection) {
            return rejection;
        },
        response: function (response) {
            return response;
        },
        responseError: function (rejection) {
            return rejection;
        }
    };
}

// Registra a AngularJS Factory para customização do httpInterceptor padrão do AngularJS.
index.factory('appHTTPInterceptors', appHTTPInterceptors);

A implementação completa das funcionalidades no HTTP Interceptor estão disponíveis na aplicação de referencia no arquivos factory-http-interceptors.js

Dicas

  1. Caso o sistema de notificações esteja implementado é possível tratar as mensagens de erro automaticamente interceptando as rejeições ou erros e já disparando o mensagem ou notificação ao usuário; eximindo o programador de que realizar o tratamento no retorno da requisição ao servidor.

  2. O contador de requisições pode ser armazenado ao $rootScope para que no AngularJS Controller principal da aplicação centralizadora possa ser validado para demonstração do tela de carregamento.

  3. Ao realizar o tratamento de timeout, muitas vezes o container web pode retornar diretamente a página de login ao invés de um redirecionamento automático, sendo muitas vezes necessário verificar o conteúdo do retorno para identificar se é a página de login para poder realizar o correto redirecionamento.
  • Sem rótulos