Home >Web Front-end >JS Tutorial >Quickly learn AngularJs HTTP response interceptor_AngularJS

Quickly learn AngularJs HTTP response interceptor_AngularJS

WBOY
WBOYOriginal
2016-05-16 15:22:212050browse

Any time, if we want to add global functionality to the request, such as authentication, error handling, etc., it is a better way to intercept the request before it is sent to the server or when the server returns.

angularJs provides a way to process at the global level through interceptors.

Four types of interceptors

Implement the request method to intercept requests

request: function(config) {
// do something on request success
return config || $q.when(config);
} 

This method will be executed before $http sends the request to the background, so you can modify the configuration or do other operations. This method receives a request configuration object as a parameter and must return a configuration object or a promise. If an invalid configuration object or promise is returned, it will be rejected, causing the $http call to fail.

Implement requestError method to intercept request exceptions

requestError: function(rejection) {
  // do something on request error  return $q.reject(rejection);
} 

Sometimes a request fails to be sent or is rejected by an interceptor. The request exception interceptor will capture those requests that were interrupted by the previous request interceptor. It can be used to restore the request or sometimes to undo the configuration made before the request, such as closing the progress bar, activating buttons and input boxes, etc.

Implement the response method to intercept the response

response: function(response) {
  // do something on response success
return response || $q.when(response);} 

This method will be executed after $http receives the response from the background, so you can modify the response or do other operations. This method receives a response object as a parameter and must return a response object or promise. The response object includes request configuration, headers, status and data from the background. If an invalid response object is returned or the promise will be rejected, the $http call will fail.

Implement responseError method to intercept response exceptions

responseError: function(rejection) {
// do something on response error  return $q.reject(rejection);
} 

Sometimes our background call fails, or it may be rejected by a request interceptor or interrupted by a previous response interceptor. In this case, the response exception interceptor can help us resume the background call.

Interceptor Core

Interception Service Factory

var app = angular.module("ajaxHttp", []);
app.factory("httpInterceptor", [ "$q", "$rootScope", function($q, $rootScope) {
return {
request: function(config) {
// do something on request success
return config || $q.when(config);
},
   requestError: function(rejection) {
     // do something on request error
     return $q.reject(rejection)
   },
response: function(response) {
// do something on response success
return response || $q.when(response);
},
responseError : function(rejection) {
// do something on response error
return $q.reject(rejection);
}
};
}]); 

Register interception factory method

app.config(["$httpProvider", function($httpProvider) {
  $httpProvider.interceptors.push("httpInterceptor");
}]); 

Example

Interception and processing of 401, 404

app.config(["$httpProvider", function($httpProvider) { 
$httpProvider.interceptors.push('httpInterceptor'); 
}]); 
app.factory("httpInterceptor", ["$q", "$injector", function($q, $injector) {
return {
"responseError": function(response) {
if (response.status == 401) {
var rootScope = $injector.get('$rootScope');
var state = $injector.get('$rootScope').$state.current.name;
rootScope.stateBeforLogin = state;
rootScope.$state.go("login");
return $q.reject(response);
}
else if (response.status === 404) {
console.log("404!");
return $q.reject(response);
}
}
};
]);

The above content is to share with you the relevant knowledge of quickly learning AngularJs HTTP response interceptor. I hope you like it, and thank you for your continued support of the Script House website.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn