角度“响应未定义”时尝试为资源实现全局错误处理程序

Angular "Response is undefined" when attempting to implement a global error handler for a resource

本文关键字:实现 资源 全局 错误 程序 处理 响应 未定义 响应未定义 角度      更新时间:2023-09-26

我是 angular 的新手,并试图创建一个全局错误处理程序。 每当以 500 http 状态调用资源时,我都想重定向到通用错误页面。

每当我实现注入器时,我都会收到"响应未定义"错误。 我做错了什么? 我目前已注释掉重定向,但仍然收到错误。

var appServices = angular.module('appServices', ['ngResource']);
appServices.factory('ApplicationService', ['$resource', function ($resource) {
    return $resource('http://localhost:23357/api/application/:id', { id: '@id' }, {
        update: {
            method: 'PUT'
        }
    });
}]);
appServices.factory('globalErrorInterceptor', ['$location', '$q', '$injector', function ($location, $q, $injector) {
    return {
        'responseError': function (r) {
            console.log('global error test');
            /*
            commented out for testing
            if (r.status == 500) {
               $location.path('/error');
            }
            else
               return $q.reject(r);
            */
            return $q.reject(r);
        }
    }
}]);
appServices.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.interceptors.push('globalErrorInterceptor')
}]);

然后在我的控制器中,我像这样调用资源。 目前,Web 服务设置为始终返回 500。

$scope.applications = ApplicationService.query();

我需要始终返回 $q.reject,因此工作拦截器如下所示:

appServices.factory('globalErrorInterceptor', ['$location', '$q', '$injector', function ($location, $q, $injector) {
    return {
        'responseError': function (r) {
            console.log(r);
            if (r.status == 500) {
                $location.path('/error');
            }
            return $q.reject(r);
        }
    }
}]);