The $http Service in Angular JS allow us to communicate smoothly with back-end services. I came into a scenario where I need to monitor all http requests/responses happening using $http service. we can do that with each $http use, but I strongly believe in not copy/past and duplicate the code over and over. so I was looking into an approach to that allow me to write a function or method that will be called with each http request made.
Angular Js supporting interceptors concept for $httpProviders service. The interceptor is a service function that will be called with each call for service..In our scenario, you can think of the interceptor as a man monitor the traffic going back and forth.
Below code is basically adding a value to http request header and test the response status if it is 600 (custom value) then do certain action.
// interceptor logic. app.factory('httpInterceptor', function ($q) { return { request: function(config) { config.headers['X-MyHeaderKey'] = "MyHeaderValue"; return config; }, requestError: function(rejectReason) { //Do certain actions return $q.reject(rejectReason);
}, response: function (response) { //Do certain actions return response; }, responseError: function (response) { if (response.status === 600) { //Do needed logic in case of status 600 return $q.reject(response); } else { return $q.reject(response); } } }; }); app.config(function ($httpProvider) { $httpProvider.interceptors.push('httpInterceptor'); });
$httpProviders provides 4 main types of interceptors that you can use:
1) Request Interceptor: This service method will be called when $http service send request to back-end server. in the example able we simply injected a new key/value in the http request header.
2) Response Interceptor: This service method will be called after request sent to the server and once the $http service received the response. the response will be received as a parameter to the service method.
3) RequestError Interceptor: In some cases the request can’t be sent or other interceptors reject sending the request to back-end service. In this case, this service method will be called.
4) ResponseError Interceptor: This service method will be called whenever the back-end service has failure and return error to $http service.