2016-05-26 90 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(){}); 
         } 
        } 

完全不