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时调用此拦截器。
   147   148   149   150   151   152   153   154   155   156   157