Page 152 - AngularJS权威教程
P. 152
132 第 15 章 同外界通信:XHR 和服务器通信
capacity: 20
});
// $http请求
$http.get('/api/users.json', { cache: lru })
.success(function(data){})
.error(function(data){});
现在,最新的20个请求会被缓存。第21个请求会导致LRU从缓存中将时间比较老的请求移除掉。
每次发送请求时都传入一个自定义缓存是很麻烦的事情(即使是在服务中)。可以通过应用
的.config()函数给所有$http请求设置一个默认的缓存:
angular.module('myApp', [])
.config(function($httpProvider, $cacheFactory) {
$httpProvider.defaults.cache = $cacheFactory('lru', {
capacity: 20
});
});
现在,所有的请求都会使用我们自定义的LRU缓存了。
15.5 拦截器
任何时候如果我们想要为请求添加全局功能,例如身份验证、错误处理等,在请求发送给服
务器之前或者从服务器返回时对其进行拦截,是比较好的实现手段。
例如对于身份验证,如果服务器返回401状态码,我们会希望将用户重定向到登录页面。
AngularJS通过拦截器提供了一个从全局层面对响应进行处理的途径。
拦截器,尽管名字听起来很唬人,实际上是$http服务的基础中间件,用来向应用的业务流
程中注入新的逻辑。
拦截器的核心是服务工厂(查看第14章获得更多关于服务的信息),通过向$httpProvider.
interceptors数组中添加服务工厂,在$httpProvider中进行注册。
一共有四种拦截器,两种成功拦截器,两种失败拦截器。
request
AngularJS通过$http设置对象来对请求拦截器进行调用。它可以对设置对象进行修改,或者创建
一个新的设置对象,它需要返回一个更新过的设置对象,或者一个可以返回新的设置对象的promise。
response
AngularJS通过$http设置对象来对响应拦截器进行调用。它可以对响应进行修改,或者创建
一个新的响应,它需要返回一个更新过的响应,或者一个可以返回新响应的promise。
requestError
AngularJS会在上一个请求拦截器抛出错误,或者promise被reject时调用此拦截器。
responseError
AngularJS会在上一个响应拦截器抛出错误,或者promise被reject时调用此拦截器。