Javascript ngResource+;401错误处理:预期响应为数组或对象
我在ngResource中使用以下代码来检索对象列表:Javascript ngResource+;401错误处理:预期响应为数组或对象,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我在ngResource中使用以下代码来检索对象列表: // Create the 'articles' service angular.module('articles').factory('Articles', ['$resource', function($resource) { // Use the '$resource' service to return an article '$resource' object return $re
// Create the 'articles' service
angular.module('articles').factory('Articles', ['$resource', function($resource) {
// Use the '$resource' service to return an article '$resource' object
return $resource('../api/admins/:adminId/articles/:articleId', {
adminId: '@adminId'
}, {
update: {
method: 'PUT'
}
});
}]);
检索的文章如下所示:
$scope.list = function() {
// Use the articles'query' method to send an appropriate GET request
Articles.query(
function(articles){
$scope.data.articles= articles;
},
function(error){
console.log(error);
}
);
};
当用户登录时,一切正常:客户端需要一个数组,这就是它得到的
但是,当登录超时一段时间后,服务器将返回一个401错误,其中包含一个对象而不是一个数组。事实上,这正是应该发生的,但是Angular抛出了以下错误:
Error: [$resource:badcfg] Error in resource configuration.
Expected response to contain an array but got an object
当用户检索被禁止的页面时,同样的问题也会发生(403)
有没有一种方法可以解决401和403请求错误,而不会在Angular中得到实际的javascript错误 默认情况下,$resource的查询操作需要从服务器返回一个数组(请参阅文档) 您可以对查询操作使用transformResponse选项来补偿这种情况,如下所示:
return $resource('../api/admins/:adminId/articles/:articleId', {
adminId: '@adminId'
}, {
update: {
method: 'PUT'
},
query: {
transformResponse: function(data, headers) {
if(!angular.isArray(data)) {
return new Array(data);
}
return data;
}
}
});
当然,最好是使用错误回调或拦截器来处理错误尝试在
方法之后的$resource请求中添加isArray:false
:“你的方法”
Thanx Sandhje,他的作品很有魅力!)(我也会看一下拦截器)Sandhje-你能发布一个拦截器的例子吗?