SlideShare a Scribd company logo
Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br
Interceptors com AngularJS
HTTP Interceptors com AngularJS
Um interceptor é um tipo de serviço que
permite a interceptação das requisições e
respostas do serviço $http.
1. app.factory("nomeDoInterceptorA",	
  function	
  ($q)	
  {	
  
2. 	
  	
  return	
  {	
  
3. 	
  	
  	
  	
  request:	
  function	
  (config)	
  {	
  
4. 	
  	
  	
  	
  	
  	
  return	
  config;	
  
5. 	
  	
  	
  	
  },	
  
6. 	
  	
  	
  	
  requestError:	
  function	
  (rejection)	
  {	
  
7. 	
  	
  	
  	
  	
  	
  return	
  $q.reject(rejection);	
  
8. 	
  	
  	
  	
  },	
  
9. 	
  	
  	
  	
  response:	
  function	
  (response)	
  {	
  
10. 	
  	
  	
  	
  	
  	
  return	
  response;	
  
11. 	
  	
  	
  	
  },	
  
12. 	
  	
  	
  	
  responseError:	
  function	
  (rejection)	
  {	
  
13. 	
  	
  	
  	
  	
  	
  return	
  $q.reject(rejection);	
  
14. 	
  	
  	
  	
  }	
  
15. 	
  	
  };	
  
16. });
Configurando o interceptor
O serviço $http possui um array de
interceptors que podem ser configurados na
inicialização da aplicação.	
  
1. app.config(function	
  ()	
  {	
  
2. });
1. app.config(function	
  ($httpProvider)	
  {	
  
2. });
1. app.config(function	
  ($httpProvider)	
  {	
  
2. 	
  	
  $httpProvider.interceptors.push("nomeDoInterceptorA");	
  
3. });
1. app.config(function	
  ($httpProvider)	
  {	
  
2. 	
  	
  $httpProvider.interceptors.push("nomeDoInterceptorA");	
  
3. 	
  	
  $httpProvider.interceptors.push("nomeDoInterceptorB");	
  
4. });
1. app.config(function	
  ($httpProvider)	
  {	
  
2. 	
  	
  $httpProvider.interceptors.push("nomeDoInterceptorA");	
  
3. 	
  	
  $httpProvider.interceptors.push("nomeDoInterceptorB");	
  
4. 	
  	
  $httpProvider.interceptors.push("nomeDoInterceptorC");	
  
5. });
1. app.config(function	
  ($httpProvider)	
  {	
  
2. 	
  	
  $httpProvider.interceptors.push("nomeDoInterceptorA");	
  
3. 	
  	
  $httpProvider.interceptors.push("nomeDoInterceptorB");	
  
4. 	
  	
  $httpProvider.interceptors.push("nomeDoInterceptorC");	
  
5. });
Timestamp Interceptor	
  
Adiciona uma marcação contendo um
timestamp em todas as requisições.	
  
1. app.factory("timestampInterceptor",	
  function	
  ()	
  {	
  
2. });
1. app.factory("timestampInterceptor",	
  function	
  ()	
  {	
  
2. 	
  	
  return	
  {	
  
3. 	
  	
  };	
  
4. });
1. app.factory("timestampInterceptor",	
  function	
  ()	
  {	
  
2. 	
  	
  return	
  {	
  
3. 	
  	
  	
  	
  request:	
  function	
  (config)	
  {	
  
4. 	
  	
  	
  	
  	
  	
  return	
  config;	
  
5. 	
  	
  	
  	
  }	
  
6. 	
  	
  };	
  
7. });
1. app.factory("timestampInterceptor",	
  function	
  ()	
  {	
  
2. 	
  	
  return	
  {	
  
3. 	
  	
  	
  	
  request:	
  function	
  (config)	
  {	
  
4. 	
  	
  	
  	
  	
  	
  var	
  timestamp	
  =	
  new	
  Date().getTime();	
  
5. 	
  	
  	
  	
  	
  	
  config.url	
  =	
  config.url	
  +	
  "?timestamp="	
  +	
  timestamp;	
  
6. 	
  	
  	
  	
  	
  	
  return	
  config;	
  
7. 	
  	
  	
  	
  }	
  	
  
8. 	
  	
  };	
  
9. });
1. app.config(function	
  ($httpProvider)	
  {	
  
2. 	
  	
  $httpProvider.interceptors.push("timestampInterceptor");	
  
3. });
Error Interceptor	
  
Exibe a tela de erro padrão caso uma
requisição HTTP receba um status code 404
como resposta.	
  
1. app.factory("errorInterceptor",	
  function	
  ()	
  {	
  
2. });
1. app.factory("errorInterceptor",	
  function	
  ($q)	
  {	
  
2. 	
  	
  return	
  {	
  
3. 	
  	
  	
  	
  responseError:	
  function	
  (rejection)	
  {	
  
4. 	
  	
  	
  	
  	
  	
  return	
  $q.reject(rejection);	
  
5. 	
  	
  	
  	
  }	
  
6. 	
  	
  };	
  
7. });
1. app.factory("errorInterceptor",	
  function	
  ($q,	
  $location)	
  {	
  
2. 	
  	
  return	
  {	
  
3. 	
  	
  	
  	
  responseError:	
  function	
  (rejection)	
  {	
  
4. 	
  	
  	
  	
  	
  	
  if	
  (rejection.status	
  ==	
  404)	
  {	
  
5. 	
  	
  	
  	
  	
  	
  	
  	
  $location.path("/error");	
  
6. 	
  	
  	
  	
  	
  	
  }	
  
7. 	
  	
  	
  	
  	
  	
  return	
  $q.reject(rejection);	
  
8. 	
  	
  	
  	
  }	
  
9. 	
  	
  };	
  
10. });
1. app.config(function	
  ($httpProvider)	
  {	
  
2. 	
  	
  $httpProvider.interceptors.push("errorInterceptor");	
  
3. });
Loading Interceptor	
  
Exibe uma imagem de loading enquanto
tiver uma requisição em andamento.	
  
1. app.factory("loadingInterceptor",	
  function	
  ()	
  {	
  
2. });
1. app.factory("loadingInterceptor",	
  function	
  ($q)	
  {	
  
2. 	
  	
  return	
  {	
  
3. 	
  	
  	
  	
  request:	
  function	
  (config)	
  {	
  
4. 	
  	
  	
  	
  	
  	
  return	
  config;	
  
5. 	
  	
  	
  	
  },	
  
6. 	
  	
  	
  	
  requestError:	
  function	
  (rejection)	
  {	
  
7. 	
  	
  	
  	
  	
  	
  return	
  $q.reject(rejection);	
  
8. 	
  	
  	
  	
  },	
  
9. 	
  	
  	
  	
  response:	
  function	
  (response)	
  {	
  
10. 	
  	
  	
  	
  	
  	
  return	
  response;	
  
11. 	
  	
  	
  	
  },	
  
12. 	
  	
  	
  	
  responseError:	
  function	
  (rejection)	
  {	
  
13. 	
  	
  	
  	
  	
  	
  return	
  $q.reject(rejection);	
  
14. 	
  	
  	
  	
  }	
  
15. 	
  	
  };	
  
16. });
1. app.factory("loadingInterceptor",	
  function	
  ($q,	
  $rootScope)	
  {	
  
2. 	
  	
  return	
  {	
  
3. 	
  	
  	
  	
  request:	
  function	
  (config)	
  {	
  
4. 	
  	
  	
  	
  	
  	
  $rootScope.loading	
  =	
  true;	
  
5. 	
  	
  	
  	
  	
  	
  return	
  config;	
  
6. 	
  	
  	
  	
  },	
  
7. 	
  	
  	
  	
  requestError:	
  function	
  (rejection)	
  {	
  
8. 	
  	
  	
  	
  	
  	
  $rootScope.loading	
  =	
  false;	
  
9. 	
  	
  	
  	
  	
  	
  return	
  $q.reject(rejection);	
  
10. 	
  	
  	
  	
  },	
  
11. 	
  	
  	
  	
  response:	
  function	
  (response)	
  {	
  
12. 	
  	
  	
  	
  	
  	
  $rootScope.loading	
  =	
  false;	
  
13. 	
  	
  	
  	
  	
  	
  return	
  response;	
  
14. 	
  	
  	
  	
  },	
  
15. 	
  	
  	
  	
  responseError:	
  function	
  (rejection)	
  {	
  
16. 	
  	
  	
  	
  	
  	
  $rootScope.loading	
  =	
  false;	
  
17. 	
  	
  	
  	
  	
  	
  return	
  $q.reject(rejection);	
  
18. 	
  	
  	
  	
  }	
  
19. 	
  	
  };	
  
20. });
1. app.config(function	
  ($httpProvider)	
  {	
  
2. 	
  	
  $httpProvider.interceptors.push("loadingInterceptor");	
  
3. });
Rodrigo Branas	
  
Agile Code: http://www.agilecode.com.br
Twitter: @rodrigobranas
SlideShare: http://www.slideshare.com/rodrigobranas
YouTube: http://www.youtube.com/rodrigobranas
LinkedIn: http://br.linkedin.com/in/rodrigobranas
+Plus: https://plus.google.com/+RodrigoBranas
GitHub: http://www.github.com/rodrigobranas

More Related Content

Viewers also liked (20)

PDF
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Rodrigo Branas
 
PPTX
Criando serviços com AngularJS
Rodrigo Branas
 
PPTX
Utilizando diretivas com AngularJS
Rodrigo Branas
 
PPTX
Introdução ao AngularJS
Rodrigo Branas
 
PPTX
Criando Filtros com AngularJS
Rodrigo Branas
 
PPTX
Scope AngularJS
Rodrigo Branas
 
PPTX
Criando aplicações Single-Page com AngularJS
Rodrigo Branas
 
PPTX
A evolução do AngularJS
Rodrigo Branas
 
PDF
#2 - Git - DAG
Rodrigo Branas
 
PPTX
AngularJS $http Interceptors (Explanation and Examples)
Brian Swartzfager
 
PDF
Node.js - #5 - Process - Rodrigo Branas
Rodrigo Branas
 
PDF
Node.js - #6 - Core Modules - net - Rodrigo Branas
Rodrigo Branas
 
PDF
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Rodrigo Branas
 
PPTX
HTTP, JSON, REST e AJAX com AngularJS
Rodrigo Branas
 
PPTX
JavaScript - Date
Rodrigo Branas
 
PPTX
Automação de Testes com AngularJS
Rodrigo Branas
 
PPTX
AngularJS - 10 passos para aprender a criar suas directivas
Janderson Fernandes Cardoso
 
PPTX
JavaScript - Expressões Regulares
Rodrigo Branas
 
PPTX
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Rodrigo Branas
 
PPTX
Desvendando a linguagem JavaScript
Rodrigo Branas
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Rodrigo Branas
 
Criando serviços com AngularJS
Rodrigo Branas
 
Utilizando diretivas com AngularJS
Rodrigo Branas
 
Introdução ao AngularJS
Rodrigo Branas
 
Criando Filtros com AngularJS
Rodrigo Branas
 
Scope AngularJS
Rodrigo Branas
 
Criando aplicações Single-Page com AngularJS
Rodrigo Branas
 
A evolução do AngularJS
Rodrigo Branas
 
#2 - Git - DAG
Rodrigo Branas
 
AngularJS $http Interceptors (Explanation and Examples)
Brian Swartzfager
 
Node.js - #5 - Process - Rodrigo Branas
Rodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Rodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Rodrigo Branas
 
HTTP, JSON, REST e AJAX com AngularJS
Rodrigo Branas
 
JavaScript - Date
Rodrigo Branas
 
Automação de Testes com AngularJS
Rodrigo Branas
 
AngularJS - 10 passos para aprender a criar suas directivas
Janderson Fernandes Cardoso
 
JavaScript - Expressões Regulares
Rodrigo Branas
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Rodrigo Branas
 
Desvendando a linguagem JavaScript
Rodrigo Branas
 

More from Rodrigo Branas (15)

PDF
Clean Architecture
Rodrigo Branas
 
PDF
Node.js - #4 - Timers - Rodrigo Branas
Rodrigo Branas
 
PDF
Node.js - #3 - Global Objects - Rodrigo Branas
Rodrigo Branas
 
PDF
Node.js - #1 - Introdução - Rodrigo Branas
Rodrigo Branas
 
PDF
#6 - Git - Desfazendo as coisas
Rodrigo Branas
 
PDF
#1 - Git - Introdução
Rodrigo Branas
 
PDF
#5 - Git - Contribuindo com um repositório remoto
Rodrigo Branas
 
PDF
#4 - Git - Stash
Rodrigo Branas
 
PDF
#3 - Git - Branching e Merging
Rodrigo Branas
 
PPTX
Construindo Diretivas com AngularJS
Rodrigo Branas
 
PPTX
Técnicas de Refactoring
Rodrigo Branas
 
PPTX
Selenium - WebDriver
Rodrigo Branas
 
PPTX
Test-Driven Development com JavaScript, Jasmine Karma
Rodrigo Branas
 
PPTX
Grunt
Rodrigo Branas
 
PPTX
Bower
Rodrigo Branas
 
Clean Architecture
Rodrigo Branas
 
Node.js - #4 - Timers - Rodrigo Branas
Rodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Rodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Rodrigo Branas
 
#6 - Git - Desfazendo as coisas
Rodrigo Branas
 
#1 - Git - Introdução
Rodrigo Branas
 
#5 - Git - Contribuindo com um repositório remoto
Rodrigo Branas
 
#4 - Git - Stash
Rodrigo Branas
 
#3 - Git - Branching e Merging
Rodrigo Branas
 
Construindo Diretivas com AngularJS
Rodrigo Branas
 
Técnicas de Refactoring
Rodrigo Branas
 
Selenium - WebDriver
Rodrigo Branas
 
Test-Driven Development com JavaScript, Jasmine Karma
Rodrigo Branas
 
Ad

HTTP Interceptors com AngularJS

  • 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Interceptors com AngularJS
  • 3. Um interceptor é um tipo de serviço que permite a interceptação das requisições e respostas do serviço $http.
  • 4. 1. app.factory("nomeDoInterceptorA",  function  ($q)  {   2.    return  {   3.        request:  function  (config)  {   4.            return  config;   5.        },   6.        requestError:  function  (rejection)  {   7.            return  $q.reject(rejection);   8.        },   9.        response:  function  (response)  {   10.            return  response;   11.        },   12.        responseError:  function  (rejection)  {   13.            return  $q.reject(rejection);   14.        }   15.    };   16. });
  • 5. Configurando o interceptor O serviço $http possui um array de interceptors que podem ser configurados na inicialização da aplicação.  
  • 8. 1. app.config(function  ($httpProvider)  {   2.    $httpProvider.interceptors.push("nomeDoInterceptorA");   3. });
  • 9. 1. app.config(function  ($httpProvider)  {   2.    $httpProvider.interceptors.push("nomeDoInterceptorA");   3.    $httpProvider.interceptors.push("nomeDoInterceptorB");   4. });
  • 10. 1. app.config(function  ($httpProvider)  {   2.    $httpProvider.interceptors.push("nomeDoInterceptorA");   3.    $httpProvider.interceptors.push("nomeDoInterceptorB");   4.    $httpProvider.interceptors.push("nomeDoInterceptorC");   5. });
  • 11. 1. app.config(function  ($httpProvider)  {   2.    $httpProvider.interceptors.push("nomeDoInterceptorA");   3.    $httpProvider.interceptors.push("nomeDoInterceptorB");   4.    $httpProvider.interceptors.push("nomeDoInterceptorC");   5. });
  • 12. Timestamp Interceptor   Adiciona uma marcação contendo um timestamp em todas as requisições.  
  • 14. 1. app.factory("timestampInterceptor",  function  ()  {   2.    return  {   3.    };   4. });
  • 15. 1. app.factory("timestampInterceptor",  function  ()  {   2.    return  {   3.        request:  function  (config)  {   4.            return  config;   5.        }   6.    };   7. });
  • 16. 1. app.factory("timestampInterceptor",  function  ()  {   2.    return  {   3.        request:  function  (config)  {   4.            var  timestamp  =  new  Date().getTime();   5.            config.url  =  config.url  +  "?timestamp="  +  timestamp;   6.            return  config;   7.        }     8.    };   9. });
  • 17. 1. app.config(function  ($httpProvider)  {   2.    $httpProvider.interceptors.push("timestampInterceptor");   3. });
  • 18. Error Interceptor   Exibe a tela de erro padrão caso uma requisição HTTP receba um status code 404 como resposta.  
  • 20. 1. app.factory("errorInterceptor",  function  ($q)  {   2.    return  {   3.        responseError:  function  (rejection)  {   4.            return  $q.reject(rejection);   5.        }   6.    };   7. });
  • 21. 1. app.factory("errorInterceptor",  function  ($q,  $location)  {   2.    return  {   3.        responseError:  function  (rejection)  {   4.            if  (rejection.status  ==  404)  {   5.                $location.path("/error");   6.            }   7.            return  $q.reject(rejection);   8.        }   9.    };   10. });
  • 22. 1. app.config(function  ($httpProvider)  {   2.    $httpProvider.interceptors.push("errorInterceptor");   3. });
  • 23. Loading Interceptor   Exibe uma imagem de loading enquanto tiver uma requisição em andamento.  
  • 25. 1. app.factory("loadingInterceptor",  function  ($q)  {   2.    return  {   3.        request:  function  (config)  {   4.            return  config;   5.        },   6.        requestError:  function  (rejection)  {   7.            return  $q.reject(rejection);   8.        },   9.        response:  function  (response)  {   10.            return  response;   11.        },   12.        responseError:  function  (rejection)  {   13.            return  $q.reject(rejection);   14.        }   15.    };   16. });
  • 26. 1. app.factory("loadingInterceptor",  function  ($q,  $rootScope)  {   2.    return  {   3.        request:  function  (config)  {   4.            $rootScope.loading  =  true;   5.            return  config;   6.        },   7.        requestError:  function  (rejection)  {   8.            $rootScope.loading  =  false;   9.            return  $q.reject(rejection);   10.        },   11.        response:  function  (response)  {   12.            $rootScope.loading  =  false;   13.            return  response;   14.        },   15.        responseError:  function  (rejection)  {   16.            $rootScope.loading  =  false;   17.            return  $q.reject(rejection);   18.        }   19.    };   20. });
  • 27. 1. app.config(function  ($httpProvider)  {   2.    $httpProvider.interceptors.push("loadingInterceptor");   3. });
  • 28. Rodrigo Branas   Agile Code: http://www.agilecode.com.br Twitter: @rodrigobranas SlideShare: http://www.slideshare.com/rodrigobranas YouTube: http://www.youtube.com/rodrigobranas LinkedIn: http://br.linkedin.com/in/rodrigobranas +Plus: https://plus.google.com/+RodrigoBranas GitHub: http://www.github.com/rodrigobranas

Editor's Notes