2016-05-26 127 views
1

我正在嘗試爲我的應用實施全局授權處理。攔截器未觸發

這裏你可以看到我的代碼:

.factory('Request', ['$resource', 'general', 
     function ($resource) { 
      return $resource(baseURL + ':resourceName/', {}, { 
       get : { 
        method : 'GET', 
        isArray : true, 
        transformResponse : function (data, headers) { 
         return JSON.parse(data).data; 
        }, 
        interceptor: { 
         request : function (data) { 
          console.log("test"); 
         }, 
         requestError : function (data) { 
          console.log("test"); 
         }, 
         response : function (data) { 
          console.log("test"); 
         }, 
         responseError : function (data) { 
          console.log("test"); 
          if(data.state == 401){ 
           general.logIn({},false,function(){}); 
          } 
         } 

        } 
       } 
      }); 
     } 
    ]); 

然而,沒有任何的攔截器被觸發。代碼有什麼問題?

+0

工作是否有任何錯誤在控制檯??請分享,如果有.. – seekers01

+0

控制檯中沒有任何錯誤 – Asqan

+0

被請求解僱 - 在「網絡」選項卡? – shershen

回答

2

按照角文檔,在$資源使用時,只爲攔截對象的兩個有效的方法攔截:

interceptor - {Object=} - The interceptor object has two optional methods - response and responseError. Both response and responseError interceptors get called with http response object. See $http interceptors.

參見:https://docs.angularjs.org/api/ngResource/service/ $資源

如果需要的請求方式好吧,你將不得不按照這裏的文檔:https://docs.angularjs.org/api/ng/service/ $ http

另外,我指出你已經定義了responseError兩次,而不是響應和responseError:

responseError : function (data) { 
    console.log("test"); 
}, 
responseError : function (data) { 
    console.log("test"); 
    if(data.state == 401){ 
     general.logIn({},false,function(){}); 
    } 
} 
+0

是的你是對的,但是'response'和'responseError'方法也沒有被觸發。那就是問題所在。 – Asqan

+0

你是對的!刪除'request'和'requestError'解決了它。 – Asqan

1

從角文檔中有關$資源摘自:

interceptor - {Object=} - The interceptor object has two optional methods - response and responseError. Both response and responseError interceptors get called with http response object. See $http interceptors.

如果您想與所有四個攔截器,我建議您配置的應用程序與httpProvider工作。您可以推送到interceptors陣列所有4種可能性。

事情是這樣的:

m.config(["$httpProvider", ($httpProvider: ng.IHttpProvider) => { 
      $httpProvider.interceptors.push(["$q" , (q: ng.IQService) => { 

        return { 
         'request': (config) => { 
          ..Handle request... 

          return config; 
         }, 

         'requestError': (rejection) => { 
          ..Handle requestError... 

          return $q.reject(rejection); 
         }, 

         'response': (response) => { 
          ..Handle response... 

          return response; 
         }, 

         'responseError': (rejection) => { 
          ..Handle responseError... 

          return $q.reject(rejection); 
         } 
        } 
       } 
      ]); 
     }]); 
0

你已經錯過插入「一般」到服務功能,所以

responseError : function (data) { 
         console.log("test"); 
         if(data.state == 401){ 
          general.logIn({},false,function(){}); 
         } 
        } 

完全不