[angularjs] AngularJS에서 $ resource 서비스 오류를 처리하는 방법

내 API에 요청을 보내고 AngularJS $ resource 모듈을 사용하고 있습니다. $ http와 다르기 때문에 오류를 처리하는 방법을 모르겠습니다.

내 서비스 :

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



답변

오류 핸들러를 두 번째 매개 변수로 query.

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

편집하다:

좀 더 명확하게하기 위해 몇 가지 예를 들면 다음과 같습니다.

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


답변

오류 함수에 연결된 속성 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'}
};

resourceErrorHandlerget 또는 query 메서드의 각 오류에 대해 호출되는 함수는 어디에 있습니까 ? 요청 된 문제에 대해 get 메소드 만 필요합니다. 물론 모든 작업에 적용 할 수 있습니다.

response$ resource가 정상적인 응답을 포착하기위한 다른 인터셉터 가 있습니다.

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

인터셉터는 $http모듈의 일부이며 해당 문서에서 추가로 읽을 수 있습니다 .


답변

다음은 내 ng.resource에 대한 새로운 ES6 예제 (TypeScript 사용)입니다.

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

그런 다음 컨트롤러에서 컨트롤러에 주입 된 ‘세부 사항’은 데이터 (양호)로 확인되거나 오류에 대해 거짓으로 확인되며 여기서 404 표시를 처리합니다.


답변