SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br
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

Más contenido relacionado

La actualidad más candente

Why Typescript with Clean Architecture
Why Typescript with Clean ArchitectureWhy Typescript with Clean Architecture
Why Typescript with Clean Architecture유진 정
 
Vue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRVue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRJavier Abadía
 
Drupalサイトの管理を楽にしてくれる? Multi-site機能について
Drupalサイトの管理を楽にしてくれる? Multi-site機能についてDrupalサイトの管理を楽にしてくれる? Multi-site機能について
Drupalサイトの管理を楽にしてくれる? Multi-site機能についてShumpei Kishi
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기OnGameServer
 
From Zero to Spring Boot Hero with GitHub Codespaces
From Zero to Spring Boot Hero with GitHub CodespacesFrom Zero to Spring Boot Hero with GitHub Codespaces
From Zero to Spring Boot Hero with GitHub CodespacesVMware Tanzu
 
Extending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeExtending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeAntoine Sabot-Durand
 
MySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxMySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxNeoClova
 
Gitlab flow solo
Gitlab flow soloGitlab flow solo
Gitlab flow soloviniciusban
 
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"용근 권
 
Introduction to React Hooks
Introduction to React HooksIntroduction to React Hooks
Introduction to React HooksFelicia O'Garro
 
SpringOne Tour: Spring Boot 3 and Beyond
SpringOne Tour: Spring Boot 3 and BeyondSpringOne Tour: Spring Boot 3 and Beyond
SpringOne Tour: Spring Boot 3 and BeyondVMware Tanzu
 
Introducing Drools
Introducing DroolsIntroducing Drools
Introducing DroolsMario Fusco
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 

La actualidad más candente (20)

Why Typescript with Clean Architecture
Why Typescript with Clean ArchitectureWhy Typescript with Clean Architecture
Why Typescript with Clean Architecture
 
Vue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRVue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMR
 
Git.pptx
Git.pptxGit.pptx
Git.pptx
 
Drupalサイトの管理を楽にしてくれる? Multi-site機能について
Drupalサイトの管理を楽にしてくれる? Multi-site機能についてDrupalサイトの管理を楽にしてくれる? Multi-site機能について
Drupalサイトの管理を楽にしてくれる? Multi-site機能について
 
Redis
RedisRedis
Redis
 
Git & Github for beginners
Git & Github for beginnersGit & Github for beginners
Git & Github for beginners
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
 
From Zero to Spring Boot Hero with GitHub Codespaces
From Zero to Spring Boot Hero with GitHub CodespacesFrom Zero to Spring Boot Hero with GitHub Codespaces
From Zero to Spring Boot Hero with GitHub Codespaces
 
13 mongoose
13 mongoose13 mongoose
13 mongoose
 
Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
Clean code
Clean codeClean code
Clean code
 
Extending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeExtending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss Forge
 
Backup and-recovery2
Backup and-recovery2Backup and-recovery2
Backup and-recovery2
 
MySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxMySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptx
 
Gitlab flow solo
Gitlab flow soloGitlab flow solo
Gitlab flow solo
 
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
 
Introduction to React Hooks
Introduction to React HooksIntroduction to React Hooks
Introduction to React Hooks
 
SpringOne Tour: Spring Boot 3 and Beyond
SpringOne Tour: Spring Boot 3 and BeyondSpringOne Tour: Spring Boot 3 and Beyond
SpringOne Tour: Spring Boot 3 and Beyond
 
Introducing Drools
Introducing DroolsIntroducing Drools
Introducing Drools
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 

Destacado

Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJSRodrigo Branas
 
Utilizando diretivas com AngularJS
Utilizando diretivas com AngularJSUtilizando diretivas com AngularJS
Utilizando diretivas com AngularJSRodrigo Branas
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJSRodrigo Branas
 
Criando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSCriando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSRodrigo Branas
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJSRodrigo Branas
 
AngularJS $http Interceptors (Explanation and Examples)
AngularJS $http Interceptors (Explanation and Examples)AngularJS $http Interceptors (Explanation and Examples)
AngularJS $http Interceptors (Explanation and Examples)Brian Swartzfager
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasRodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasRodrigo Branas
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSRodrigo Branas
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJSRodrigo Branas
 
AngularJS - 10 passos para aprender a criar suas directivas
AngularJS - 10 passos para aprender a criar suas directivasAngularJS - 10 passos para aprender a criar suas directivas
AngularJS - 10 passos para aprender a criar suas directivasJanderson Fernandes Cardoso
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões RegularesRodrigo Branas
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Rodrigo Branas
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 

Destacado (20)

Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
 
Utilizando diretivas com AngularJS
Utilizando diretivas com AngularJSUtilizando diretivas com AngularJS
Utilizando diretivas com AngularJS
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJS
 
Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
 
Criando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSCriando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJS
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJS
 
#2 - Git - DAG
#2 - Git - DAG#2 - Git - DAG
#2 - Git - DAG
 
AngularJS $http Interceptors (Explanation and Examples)
AngularJS $http Interceptors (Explanation and Examples)AngularJS $http Interceptors (Explanation and Examples)
AngularJS $http Interceptors (Explanation and Examples)
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJS
 
JavaScript - Date
JavaScript - DateJavaScript - Date
JavaScript - Date
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
 
AngularJS - 10 passos para aprender a criar suas directivas
AngularJS - 10 passos para aprender a criar suas directivasAngularJS - 10 passos para aprender a criar suas directivas
AngularJS - 10 passos para aprender a criar suas directivas
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Grunt
GruntGrunt
Grunt
 

Más de Rodrigo Branas

Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasRodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasRodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasRodrigo Branas
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisasRodrigo Branas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - IntroduçãoRodrigo Branas
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remotoRodrigo Branas
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e MergingRodrigo Branas
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJSRodrigo Branas
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de RefactoringRodrigo Branas
 
Test-Driven Development com JavaScript, Jasmine Karma
Test-Driven Development com JavaScript, Jasmine  KarmaTest-Driven Development com JavaScript, Jasmine  Karma
Test-Driven Development com JavaScript, Jasmine KarmaRodrigo Branas
 

Más de Rodrigo Branas (14)

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

HTTP Interceptors com AngularJS

  • 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Interceptors com AngularJS
  • 2.
  • 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

Notas del editor

  1. Qual é a sua obra?
  2. Qual é a sua obra?
  3. Desmotivado
  4. Desmotivado
  5. Motivação
  6. Desmotivação
  7. Desmotivação
  8. Desmotivação
  9. Desmotivação
  10. Desmotivação
  11. Desmotivação
  12. Desmotivação
  13. Desmotivação
  14. Desmotivação
  15. Desmotivação
  16. Desmotivação
  17. Desmotivação
  18. Desmotivação
  19. Desmotivação
  20. Desmotivação
  21. Desmotivação
  22. Desmotivação
  23. Desmotivação
  24. Desmotivação
  25. Desmotivação
  26. Desmotivação
  27. Desmotivação
  28. Desmotivação
  29. Desmotivação
  30. Desmotivação
  31. Desmotivação