国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

angular中的http攔截器Interceptors的實現

2019-11-19 17:28:05
字體:
來源:轉載
供稿:網友

在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 的各類自定義錯誤

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太湖县| 桂阳县| 体育| 额尔古纳市| 若羌县| 额尔古纳市| 开江县| 玉林市| 和硕县| 江北区| 沁源县| 安溪县| 饶平县| 大理市| 安庆市| 新乡市| 吉安县| 乐安县| 河南省| 沁阳市| 河东区| 深水埗区| 镇平县| 裕民县| 蓬溪县| 昭苏县| 宝坻区| 罗源县| 临夏市| 苏尼特左旗| 留坝县| 资阳市| 清原| 松江区| 朝阳县| 姜堰市| 防城港市| 屏南县| 瑞丽市| 噶尔县| 和林格尔县|