AngularJS 拦截器

在用展开身份验证时,在伸手发送给服务器之前还是由服务器返回时对该展开拦,是比好的实现招。

比如说,对于身份验证,如果服务器返回401状态码,将用户重定向到登录页面。

AngularJS通过拦截器提供了一个从大局层对响应进行拍卖的门道。

拦截器是$http服务的底蕴当中件,用来为利用的业务流程中流入新的逻辑。

总共来四种植拦截器,两种植成功,两种失败。

request AngularJS通过$http设置对象来针对要拦截器进行调用。

response

requestError

responseError

通过个别单步骤来利用拦截器:

当.factory()方法中创造拦截器,然后用$httpProvider在.config()中注册拦截器:

angular.module(“myApp”, [])

.factory(“myInterceptor”, function($q) {

var interceptor = {}; return interceptor; }); //第一步

angular.module(“myApp”, [])

.config( function($httpProvider) {

$httpProvider.interceptors.push(“myInterceptor”);
}); //第二步

设置$httpProvider

使用.config()可以为有请求被补充加特定的HTTP头,这对于我们身份验证的时节挺有效。默认的伸手头保存在$httpProvider.defaults.headers.common对象吃,默认形式如下

Accept: application/json, text/plain, */*

通过.config()函数可以本着这些头进行修改或者扩大

angular.module(“myApp”, [])

.config(function($httpProvider) {

$httpProvider.defaults.headers.common[‘X-Requested-By’]
= “MyAngularApp”;
});

否足以当运作时通过$http对象的defaults属性对这些默认值进行修改,例如

$http.defaults.common[‘X-Auth’] =
“RandomString”
;

偶就需要针对post类型请求进行设置,默认的post请求头是

Content-Type: application/json

得当.config()函数中对post请求的条进行修改或者扩大

angular.module(“myApp”, [])

.config(function($httpProvider) { $httpProvider.defaults.headers.post[‘X-Posted-By’]
= “MyAngularApp”;
});

每当平等篇名叫《Interceptors in AngularJS and Useful Examples By Naor
Yehudaey
》的章中起一个例子用以实现服务端的求证,这种办法叫做Token-Based验证,当用户登录的上,会起后台拿到一个sessionToken,sessionToken在劳务端标识了每个用户,并且会含有在殡葬服务端的每个请求中。

下面sessionInjector为每个被捕获的要加加了x-session-token头(如果用户就报到)

module.factory(“sessionInjector”, [“SessionService”,
function(SessionService) {

var sessionInjector = {request: function(config) {if(
!SessionService.isAnonymus) { config.headers[“x-session-token”] =
SessionService.token;
} return config; } }; return
sessionInjector; }]);

module.config([“$httpProvider”, function($httpProvider) {
$httpProvider.interceptors.push(“sessionInjector”); }]);

然后创建一个呼吁:

$http.get(“url”);

吃sessionInjector拦截之前的配备对象是这般:

{ “transformRequest”: [null],”transformResponse”: [null], “method”:
“GET”, “url”: url, “headers”: {“Accept”: “application/json, text/plain,
*/*” } }

给sessionInjector拦截后的安排对象是:

{“transformRequest”: [null], “transformResponse”: [null], “method”:
“GET”, “url”: url, “headers”: {“Accept”: “application/json, text/plain,
*/*”, “x-session-token”:
415954427904
} }

相关文章