anon
anon

Reputation: 21

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

I'm new to angular and attempting to create a global error handler. Any time a resource is called with a 500 http status, I'd like to redirect to a generic error page.

Whenever I implement an injector, I get a "response is undefined" error. What am I doing wrong? I currently have the redirect commented out and still receive the error.

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')
}]);

Then in my controller I call the resource like so. Currently the web service is setup to always return back a 500.

$scope.applications = ApplicationService.query();

Upvotes: 0

Views: 492

Answers (1)

anon
anon

Reputation: 21

I needed to always return the $q.reject, so the working interceptor looks like:

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);
        }
    }
}]);

Upvotes: 0

Related Questions