开发者社区> 炉火纯青> 正文

angular之interceptors拦截器

简介:   interceptors /* $http service在Angular中用于简化与后台的交互过程,其本质上使用XMLHttpRequest或JSONP进行与后台的数据交互。
+关注继续查看

 

 

<!DOCTYPE html>
<html ng-app="nickApp">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title>interceptors</title>
    <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    <script>
        /*
         $http service在Angular中用于简化与后台的交互过程,其本质上使用XMLHttpRequest或JSONP进行与后台的数据交互。
         在与后台的交互过程中,可能会对每条请求发送到Server之前进行预处理(如加入token),或者是在Server返回数据到达客户端还未被处理之前进行预处理(如将非JSON格式数据进行转换);
         当然还有可能对在请求和响应过程过发生的问题进行捕获处理。所以Angular为我们提供了$http拦截器,用来实现上述需求。*/
        /*
         $httpProvider中有一个 interceptors 数组,而所谓拦截器只是一个简单的注册到该数组中的常规服务工厂。
         1 首先 创建一个拦截器服务工厂
         */
        angular.module('nickApp', [])
                .factory('NickInterceptor', ['$q', function ($q) {
                    return {
                        // 可选,拦截成功的请求
                        /*
                         该方法会在$http发送请求到后台之前执行,因此你可以修改配置或做其他的操作。
                         该方法接收请求配置对象(request configuration object)作为参数,然后必须返回配置对象或者promise 。
                         如果返回无效的配置对象或者 promise 则会被拒绝,导致$http 调用失败
                         */
                        request: function (config) {
                            // 进行预处理
                            // 例如加令牌
                            config.headers['Authorization'] = 'token666';
                            /*
                             Request Headers
                             token:token666 //加的令牌
                             */
                            return config || $q.when(config);
                        },
 
                        // 可选,拦截成功的响应
                        /*
                         该方法会在$http接收到从后台过来的响应之后执行,因此你可以修改响应或做其他操作。
                         该方法接收响应对象(response object)作为参数,
                         然后必须返回响应对象或者promise。响应对象包括了请求配置(request configuration),头(headers),状态(status)和从后台过来的数据(data)。
                         如果返回无效的响应对象或者 promise 会被拒绝,导致$http调用失败。
                         */
                        response: function (response) {
                            // 进行预处理
                            // 例如 JSON.parse(response)等
                            return response || $q.when(reponse);
                        },
 
                        // 可选,拦截失败的请求
                        /*
                         有时一个请求发送失败或者被拦截器拒绝了。requestError拦截器会捕获那些被上一个请求拦截器中断的请求。
                         它可以用来恢复请求或者有时可以用来撤销请求之前所做的配置,比如关闭遮罩层,显示进度条,激活按钮和输入框之类的。
                         */
                        requestError: function (rejection) {
                            // 对失败的请求进行处理
                            // 例如 统一的弹窗提示
 
                            return $q.reject(rejection);
                        },
 
                        // 可选,拦截失败的响应
                        /*
                         有时候我们后台调用失败了。也有可能它被一个请求拦截器拒绝了,或者被上一个响应拦截器中断了。
                         在这种情况下,响应异常拦截器可以帮助我们恢复后台调用。
                         */
                        responseError: function (rejection) {
                            // 对失败的响应进行处理
                            // 例如 统一的弹窗提示
 
                            return $q.reject(rejection);
                        }
                    };
                }])
                /*
                 $httpProvider中有一个 interceptors 数组,而所谓拦截器只是一个简单的注册到该数组中的常规服务工厂。
                 2 在config方法中,将拦截器加入到$httpProvider.interceptors数组中
                 */
                .config(['$httpProvider', function ($httpProvider) {
                    $httpProvider.interceptors.push('NickInterceptor');
                }])
                .controller('bodyCtl', ['$scope', '$http', function ($scope, $http) {
                    $scope.test1 = function () {
                        console.log(11);
                        $http.get('interceptors.html');
                    };
                }])
 
    </script>
</head>
<body ng-controller="bodyCtl">
<button class="btn" ng-click="test1()">click me</button>
<div ng-view></div>
</body>
</html>

  

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用 Angular HTTP_INTERCEPTOR 拦截器来记录超时请求的一些思考
使用 Angular HTTP_INTERCEPTOR 拦截器来记录超时请求的一些思考
15 0
Angular 里 HTTP 请求和响应结构的拦截器(interceptors)在 SAP Spartacus 中的应用
Angular 里 HTTP 请求和响应结构的拦截器(interceptors)在 SAP Spartacus 中的应用
12 0
Angular 应用里 server.ts 文件的 APP_BASE_HREF token 的用法?
Angular 应用里 server.ts 文件的 APP_BASE_HREF token 的用法?
18 0
关于 Angular 应用的入口
关于 Angular 应用的入口
10 0
Angular 应用里 index.html 的作用
Angular 应用里 index.html 的作用
18 0
一款开源的 Angular Storefront 应用介绍,代号 Spartacus 诞生的历史背景
一款开源的 Angular Storefront 应用介绍,代号 Spartacus 诞生的历史背景
14 0
关于 Angular 应用的 Bootstrap 过程
关于 Angular 应用的 Bootstrap 过程
12 0
Angular 应用 tsconfig.json 文件里的 typeRoots 属性讲解
Angular 应用 tsconfig.json 文件里的 typeRoots 属性讲解
15 0
Angular 应用里 ng-package.json 文件的作用是什么?
Angular 应用里 ng-package.json 文件的作用是什么?
26 0
Angular SSR 应用启动时的一些保护措施
Angular SSR 应用启动时的一些保护措施
14 0
+关注
炉火纯青
pangguoming.com
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
Angular从零到一
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载