SlideShare a Scribd company logo
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

More Related Content

What's hot

MySQL innoDB split and merge pages
MySQL innoDB split and merge pagesMySQL innoDB split and merge pages
MySQL innoDB split and merge pages
Marco Tusa
 
Clickhouse Capacity Planning for OLAP Workloads, Mik Kocikowski of CloudFlare
Clickhouse Capacity Planning for OLAP Workloads, Mik Kocikowski of CloudFlareClickhouse Capacity Planning for OLAP Workloads, Mik Kocikowski of CloudFlare
Clickhouse Capacity Planning for OLAP Workloads, Mik Kocikowski of CloudFlare
Altinity Ltd
 
Azure vnet
Azure vnetAzure vnet
[유쉘] 1.이미지 전처리
[유쉘] 1.이미지 전처리[유쉘] 1.이미지 전처리
[유쉘] 1.이미지 전처리
lee yuseong
 
MongoDB at Scale
MongoDB at ScaleMongoDB at Scale
MongoDB at Scale
MongoDB
 
HTML presentation for beginners
HTML presentation for beginnersHTML presentation for beginners
HTML presentation for beginners
jeroenvdmeer
 
Introduction to Microsoft Azure
Introduction to Microsoft AzureIntroduction to Microsoft Azure
Introduction to Microsoft Azure
Guy Barrette
 
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
Amazon Web Services Korea
 
XML Introduction
XML IntroductionXML Introduction
XML Introduction
Bikash chhetri
 
Azure storage
Azure storageAzure storage
Azure storage
Raju Kumar
 
A complete guide to azure storage
A complete guide to azure storageA complete guide to azure storage
A complete guide to azure storage
Himanshu Sahu
 
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster PerformanceWebinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
Altinity Ltd
 
Intro To Mongo Db
Intro To Mongo DbIntro To Mongo Db
Intro To Mongo Dbchriskite
 
Azure virtual network
Azure virtual networkAzure virtual network
Azure virtual network
Lalit Rawat
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
NAVER D2
 
Disaster Recovery Cook Book
Disaster Recovery Cook BookDisaster Recovery Cook Book
Disaster Recovery Cook Book
PT Datacomm Diangraha
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
Yong Joon Moon
 
jQuery
jQueryjQuery
jQuery
Vishwa Mohan
 
All about Zookeeper and ClickHouse Keeper.pdf
All about Zookeeper and ClickHouse Keeper.pdfAll about Zookeeper and ClickHouse Keeper.pdf
All about Zookeeper and ClickHouse Keeper.pdf
Altinity Ltd
 
Rust Intro
Rust IntroRust Intro
Rust Intro
Arthur Gavkaluk
 

What's hot (20)

MySQL innoDB split and merge pages
MySQL innoDB split and merge pagesMySQL innoDB split and merge pages
MySQL innoDB split and merge pages
 
Clickhouse Capacity Planning for OLAP Workloads, Mik Kocikowski of CloudFlare
Clickhouse Capacity Planning for OLAP Workloads, Mik Kocikowski of CloudFlareClickhouse Capacity Planning for OLAP Workloads, Mik Kocikowski of CloudFlare
Clickhouse Capacity Planning for OLAP Workloads, Mik Kocikowski of CloudFlare
 
Azure vnet
Azure vnetAzure vnet
Azure vnet
 
[유쉘] 1.이미지 전처리
[유쉘] 1.이미지 전처리[유쉘] 1.이미지 전처리
[유쉘] 1.이미지 전처리
 
MongoDB at Scale
MongoDB at ScaleMongoDB at Scale
MongoDB at Scale
 
HTML presentation for beginners
HTML presentation for beginnersHTML presentation for beginners
HTML presentation for beginners
 
Introduction to Microsoft Azure
Introduction to Microsoft AzureIntroduction to Microsoft Azure
Introduction to Microsoft Azure
 
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
 
XML Introduction
XML IntroductionXML Introduction
XML Introduction
 
Azure storage
Azure storageAzure storage
Azure storage
 
A complete guide to azure storage
A complete guide to azure storageA complete guide to azure storage
A complete guide to azure storage
 
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster PerformanceWebinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
 
Intro To Mongo Db
Intro To Mongo DbIntro To Mongo Db
Intro To Mongo Db
 
Azure virtual network
Azure virtual networkAzure virtual network
Azure virtual network
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
Disaster Recovery Cook Book
Disaster Recovery Cook BookDisaster Recovery Cook Book
Disaster Recovery Cook Book
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
jQuery
jQueryjQuery
jQuery
 
All about Zookeeper and ClickHouse Keeper.pdf
All about Zookeeper and ClickHouse Keeper.pdfAll about Zookeeper and ClickHouse Keeper.pdf
All about Zookeeper and ClickHouse Keeper.pdf
 
Rust Intro
Rust IntroRust Intro
Rust Intro
 

Viewers also liked

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
Rodrigo Branas
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
Rodrigo Branas
 
Utilizando diretivas com AngularJS
Utilizando diretivas com AngularJSUtilizando diretivas com AngularJS
Utilizando diretivas com AngularJS
Rodrigo Branas
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao AngularJS
Rodrigo Branas
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJS
Rodrigo Branas
 
Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
Rodrigo 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 AngularJS
Rodrigo Branas
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJS
Rodrigo Branas
 
#2 - Git - DAG
#2 - Git - DAG#2 - Git - DAG
#2 - Git - DAG
Rodrigo 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 Branas
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
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
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
Rodrigo Branas
 
JavaScript - Date
JavaScript - DateJavaScript - Date
JavaScript - Date
Rodrigo Branas
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
Rodrigo 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 directivas
Janderson Fernandes Cardoso
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
Rodrigo 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 JavaScript
Rodrigo Branas
 

Viewers also liked (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
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao 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
 

More from Rodrigo Branas

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Rodrigo Branas
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
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
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
Rodrigo Branas
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas
Rodrigo Branas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - Introdução
Rodrigo 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 remoto
Rodrigo Branas
 
#4 - Git - Stash
#4 - Git - Stash#4 - Git - Stash
#4 - Git - Stash
Rodrigo Branas
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e Merging
Rodrigo Branas
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJS
Rodrigo Branas
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de Refactoring
Rodrigo Branas
 
Selenium - WebDriver
Selenium - WebDriverSelenium - WebDriver
Selenium - WebDriver
Rodrigo 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 Karma
Rodrigo Branas
 
Grunt
GruntGrunt
Bower
BowerBower

More from Rodrigo Branas (15)

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
 
Grunt
GruntGrunt
Grunt
 
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

Editor's Notes

  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