angular中的http拦截器Interceptors的实现

发布时间 - 2026-01-10 23:12:15    点击率:

在angularJs中增加了一个对全局的http请求统一做出处理的api--interceptors

Interceptors 有两个处理时机,分别是:

  • 其它程序代码执行 HTTP 请求之后,在实际从浏览器发出请求之前,即处理请求
  • 得到请求的响应之后,在交给其它程序代码处理之前,即处理请求的响应

其引用场景包括

  • 全局处理错误
  • 统一进行身份验证一类的处理
  • 对所有发出去的请求进行预处理
  • 对所有收到的响应进行预处理等等

使用实例如下:

commonService.config(['$httpProvider',function($httpProvider){

    //$httpProvider.defaults.headers.common = {'X-Auth-Token': $.cookie('x_auth_token'),'Content-Type':'application/json;charset=UTF-8'};

    //添加拦截器;

    $httpProvider.interceptors.push(function ($q) {

      return {

        request: function (obj) {
               

          $('.loading').show();

          obj.headers['X-Auth-Token'] = $.cookie('x_auth_token');

          if(!obj.headers['Content-Type'])

            obj.headers['Content-Type'] = 'application/json;charset=UTF-8';

 

          var url, params,method;

       

          //加盟店请求

          mylog('jiamengdian::',sessionStorage.getItem("chainStorefrnId"));

          if(sessionStorage.getItem("chainStorefrnId")){

            //增加操作人id,name和storeid等信息

            //操作人姓名

            var operatorName = $.cookie("userType") == "employee" ? decodeURI($.cookie("username")) : decodeURI($.cookie("frnName"));

            //操作人id

            var operatorId = $.cookie("userId");

            //加盟店id

            var operatorStoreId = $.cookie("frnId");

            if (obj.method) {

              method = obj.method.toLowerCase();

            } else {

              method = "get";

            }

            //处理url,区分首次授信还是追加授信

            var flag_url = sessionStorage.getItem('chainStoreFlag');

            mylog('flag_url',flag_url);

            if(flag_url && flag_url == "firstcredit"){

 

              //提交需要加上加盟店标识

              if(obj.url.indexOf("firstcredit/createPerFirstCredit")!=-1){

                //标识个人提交

                obj.url = obj.url.replace('firstcredit/createPerFirstCredit','firstcredit/perFirstCreditByFranchisee');

              }

              else if(obj.url.indexOf("firstcredit/createBusiFirstCredit")!=-1){

                //标识企业提交

                obj.url = obj.url.replace('firstcredit/createBusiFirstCredit','firstcredit/createBusiFirstCreditByFranchisee');

              }

             
              } else {

                url = obj.url + "?creditType=1&operatorName=" + operatorName + "&operatorId=" + operatorId + "&operatorStoreId=" + operatorStoreId;

               }

            }

          return obj;

        },

        response: function (res) {

          $(".loading").hide();

          return res;

        },

        responseError: function (err) {

          $(".loading").hide();

          return $q.reject(err);

        }

      };

    });

  }]); 

改api共有4个方法,分别为request ,requestError ,response ,responseError ,这个四个方法非必选,可根据需要调用,前两个是请求的前置处理,后两个是针对请求的响应的处理。

  • request :接收一个参数,它是 $http 中的标准 config 对象,同时也需要返回一个标准 config ,此时可以添加各类身份验证信息,同时也可在此启动进度条
  • requestError :当有多个 Interceptor 的时候, requestError 会在前一个 Interceptor 抛出错误或者执行 $q.reject() 时执行,接收的参数就对应的错误
  • response :接受一个请求对象参数,可以不处理就直接返回,此时也可以将进度条显示为成功完成,当然,如果后端 API 返回自定义错误时,HTTP 的状态码仍然是 200 得话,便在这里处理自定义错误,也可以对返回数据做一些处理,注意要将进度条置为完成
  • responseError :这个是重头戏,即可以处理标准的 Http 错误,如服务器没有响应时,或者 PHP 之类的 CGI 经常出现的 502 一类,还可以处理 HTTP 状态码不是 200 的各类自定义错误

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# angularjs  # http拦截器  # angular  # angular2  # http  # 拦截  # 对angular 监控数据模型变化的事件方法$watch详解  # 关于angular js_$watch监控属性和对象详解  # 分享Angular http interceptors 拦截器使用(推荐)  # 详解AngularJS用Interceptors来统一处理HTTP请求和响应  # Angular通过 HTTP Interceptor 实现 HTTP 请求超时监控的例子  # 自定义  # 也可  # 进度条  # 身份验证  # 授信  # 在这里  # 还可以  # 首次  # 多个  # 在此  # 它是  # 分别为  # 要将  # 仍然是  # 在前  # 以对  # 抛出  # 大家多多  # 增加了  # 后端 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在自有机房高效搭建专业网站?  如何正确选择百度移动适配建站域名?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  文字头像制作网站推荐软件,醒图能自动配文字吗?  Android Socket接口实现即时通讯实例代码  如何为不同团队 ID 动态生成多个独立按钮  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  黑客入侵网站服务器的常见手法有哪些?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  活动邀请函制作网站有哪些,活动邀请函文案?  如何正确下载安装西数主机建站助手?  Swift中循环语句中的转移语句 break 和 continue  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  如何在建站之星网店版论坛获取技术支持?  想要更高端的建设网站,这些原则一定要坚持!  大连 网站制作,大连天途有线官网?  太平洋网站制作公司,网络用语太平洋是什么意思?  网站制作软件有哪些,制图软件有哪些?  在Oracle关闭情况下如何修改spfile的参数  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Android使用GridView实现日历的简单功能  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  高端网站建设与定制开发一站式解决方案 中企动力  如何在新浪SAE免费搭建个人博客?  Laravel如何配置任务调度?(Cron Job示例)  如何快速搭建二级域名独立网站?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何利用DOS批处理实现定时关机操作详解  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  中山网站制作网页,中山新生登记系统登记流程?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Laravel如何生成API文档?(Swagger/OpenAPI教程)  如何用VPS主机快速搭建个人网站?  如何在橙子建站中快速调整背景颜色?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel Docker环境搭建教程_Laravel Sail使用指南  网站建设整体流程解析,建站其实很容易!  如何基于PHP生成高效IDC网络公司建站源码?  手机软键盘弹出时影响布局的解决方法  原生JS获取元素集合的子元素宽度实例  如何用免费手机建站系统零基础打造专业网站?