我正在尝试为我的应用实施全局授权处理。
在这里,您可以看到我的代码:
.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 :(得分:2)
根据Angular文档,在$ resource中使用的拦截器只有两个有效的拦截器对象方法:
interceptor - {Object =} - 拦截器对象有两个可选项 方法 - 响应和响应错误。响应和responseError都有 使用http响应对象调用拦截器。见$ http 拦截器。
请参阅:https://docs.angularjs.org/api/ngResource/service/ $ resource
如果您还需要请求方法,则必须遵循此处的文档:https://docs.angularjs.org/api/ng/service/ $ http
另外,我注意到你已经定义了两次responseError,而不是response和responseError:
responseError : function (data) {
console.log("test");
},
responseError : function (data) {
console.log("test");
if(data.state == 401){
general.logIn({},false,function(){});
}
}
答案 1 :(得分:1)
取自关于$ resource的Angular文档:
interceptor - {Object =} - 拦截器对象有两个可选方法 - response和responseError。使用http响应对象调用响应和responseError拦截器。请参阅$ http拦截器。
如果您想使用所有四个拦截器,我建议您使用httpProvider
配置您的应用。您可以将所有4种可能性推送到interceptors
阵列。
这样的事情:
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);
}
}
}
]);
}]);
答案 2 :(得分:0)
您错过了将“常规”插入服务功能,所以
responseError : function (data) {
console.log("test");
if(data.state == 401){
general.logIn({},false,function(){});
}
}
根本不起作用