Interceptores HTTP Con Angularjs
adrianalonso.es
web developer
¿Como funciona el servicio http de Angular?
- Servicio nativo del framework que permite conectarnos a apis
- $http en el core se puede injectar en los constructores
- AJAX O JSONP
- Verbos Tradicionales
- Promise API
Ejemplo Request
$http.get('/url').
success(function(data, status, headers, config) {
// callback de éxito
}).
error(function(data, status, headers, config) {
// callback de error
});
¿Que es un Interceptor ?
- Middle ware se interpone entre request y responses
- Se utiliza por ejemplo para validar autenticacion
- DRY Pattern
- Capaz de interceptar estas peticiones antes de que sean manejadas por el servidor adaptándolas a tus necesidades.
- Pre/Post Procesado de las responses y request
Ejemplo Auth
var config = {headers: {
'Authorization': 'Basic d2VudHsvcnRobgFuOkNoYW5nZV9tZQ==',
'Accept': 'application/json;odata=verbose',
"X-Testing" : "testing"
}
};
$http.get("/test", config);
Configuración del Servicio
Para implementar un interceptor http en angularjs se necesita registrar una factoría la cual se inyectará en la configuración del servicio $httpProvider. Este interceptor nos permite suscribirnos a los siguientes eventos:
- request: este evento nos devuelve la configuración del objeto http permitiéndonos modificarla o crear una nuevo.
- requestError: este evento es llamado justo antes de lanzar un error en la petición
- response: este evento nos permite modificar el objeto respuesta recibido en una petición.
- responseError: este evento es llamado justo antes de lanzar un error de respuesta
Ejemplo Config
// Definición de la factoría
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
return {
// optional method
'request': function(config) {
// do something on success
return config;
},
// optional method
'requestError': function(rejection) {
// do something on error
if (canRecover(rejection)) {
return responseOrNewPromise
}
return $q.reject(rejection);
},
// optional method
'response': function(response) {
// do something on success
return response;
},
// optional method
'responseError': function(rejection) {
// do something on error
if (canRecover(rejection)) {
return responseOrNewPromise
}
return $q.reject(rejection);
}
};
});
// configuracion del interceptor
$httpProvider.interceptors.push('myHttpInterceptor');
Implementación Real
return {
request: function (config) {
if(config.url.indexOf("/api/") !== -1)){
isLogged=$localStorage.get('logged');
if(isLogged){
user=$localStorage.getObject('user');
config.headers['Authorization'] = 'Basic ' + user.encode;
}else{
$location.path('/login');
}
}
return config || $q.when(config);
},
responseError: function(response) {
// Unauthorized
if(response.status==401){
$location.path('/login');
}
return $q.reject(response);
}
};
}
GRACIAS
http://adrianalonso.es/2015/01/interceptores-http-para-angularjs/
Interceptores http
By Adrián Alonso Vega
Interceptores http
- 779