Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ngResource+;401错误处理:预期响应为数组或对象_Javascript_Arrays_Angularjs - Fatal编程技术网

Javascript ngResource+;401错误处理:预期响应为数组或对象

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

我在ngResource中使用以下代码来检索对象列表:

    // 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-你能发布一个拦截器的例子吗?