2013-12-14 2 views
95

Я делаю запросы к моему API, и я использую модуль ресурсов AngularJS $. Это отличается от $ http, поэтому я не знаю, как обращаться с моими ошибками.Как обрабатывать ошибки службы ресурсов в AngularJS

Моя служба:

var appServices = angular.module('app.services', ['ngResource']); 
appServices.factory('Category', ['$resource', 
    function($resource){ 
     return $resource('/apicategoryerr/?format=:format', {}, { 
      query: { 
       method: 'GET', 
       params: { format: 'json'}, 
       isArray: true, 

      } 
     }); 
    }]); 

Мой контроллер:

... 
Category.query(function(data) { 
       console.log(data); 
      }); 
... 

Я хочу что-то вроде этого или .. я не знаю, способ обработки ошибок, если мой API не работает ..

Category.query().success(function() { 
       console.log('success'); 
      }).error(function() { 
       console.log('error'); 
      }); 

ответ

176

вы можете передать обработчик ошибок в качестве второго параметра query.

Category.query(function(data) {}, function() {}); 

EDIT:

, чтобы сделать вещи немного яснее, некоторые примеры:

var Resource = $resource('/restapi/resource'); 

Resource.query(function(data) { 
    // success handler 
}, function(error) { 
    // error handler 
}); 

Resource.query({ 
    'query': 'thequery' 
},function(data) { 
    // success handler 
}, function(error) { 
    // error handler 
}); 

Resource.query().$promise.then(function(data) { 
    // success handler 
}, function(error) { 
    // error handler 
}); 

Resource.query({ 
    'query': 'thequery' 
}).$promise.then(function(data) { 
    // success handler 
}, function(error) { 
    // error handler 
}); 
+2

В документации это больше похоже на третий параметр - обратный вызов ошибки. "Resource.action ([parameters], [success], [error])" http://docs.angularjs.org/api/ngResource.$resource – Marcel

+0

yes, если вы передаете объект конфигурации. –

+4

Есть ли способ определить обработчик ошибок по умолчанию, общий для всех использования этого ресурса (например, «ресурс, не авторизованный сервером»? –

67

Вы можете определить обработчик ошибок на этапе создания ресурса путем добавления interceptor объекта в описании метода, с свойством responseError, связанным с вашей функцией ошибки.

function resourceErrorHandler(response) { ... } 

$resource('/path/:param/', {} , 
{ 
     'get': {method:'GET', 
        interceptor : {responseError : resourceErrorHandler}}, 
     'save': {method:'POST'}, 
     'query': {method:'GET', isArray:true, 
        interceptor : {responseError : resourceErrorHandler}}, 
     'remove': {method:'DELETE'}, 
     'delete': {method:'DELETE'} 
}; 

где resourceErrorHandler функция называется по каждой ошибке на GET или методе запроса. Для заданной проблемы метод get является единственным необходимым. Конечно, вы можете применить это к любому действию.

Другой перехватчик response существует для $ resource, чтобы поймать нормальный ответ.

{'get': {method:'GET', interceptor : {response : resourceResponseHandler}}, 

Перехватчики являются частью $http модуля, вы можете далее read about them in their docs.

1

Вот новый пример ES6 (я использую машинопись) на моем ng.resource

resolve: { 
    detail: function (myService, $stateParams) { 
     return myService.getEventDetail({ id: $stateParams.id }).$promise.then(data => data, error => false); 
    } 
} 

, а затем в мой контроллер, «деталь» вводится в контроллер либо разрешить к данным (хорошо) или false для ошибки, где я обрабатываю отображение 404.

Смежные вопросы