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


96

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

답변:


179

오류 핸들러를 두 번째 매개 변수로 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
});

2
문서에서는 세 번째 매개 변수가 오류 콜백 인 것처럼 보입니다. "Resource.action ([변수], [성공], [에러])" docs.angularjs.org/api/ngResource.$resource
마르셀

4
이 자원의 모든 사용에 공통적 인 기본 오류 처리기를 정의하는 방법이 있습니까 (예 : "서버에서 승인하지 않은 자원"?
Nicolas Janel 2014 년

2
@NicolasJanel 당신은 그것을 처리 할 함수를 정의 할 수 Resource.query().$promise.then(function(data) {}, errorFunction)있습니다. 쿼리를 사용하는 모든 위치에 포함해야하지만 적어도 매번 재정의하지는 않습니다.
schillingt 2014 년

이 질문에 대한 대답으로이 동의하면 @valkirilov 나는 그것을 감사하겠습니다
marco.eig

2
같은 인스턴스 메소드의 리턴 값을 @Kaspar myResource.$savemyResource.$delete약속이다. 그래서 당신은 할 수 있습니다 myResource.$save().then(...).
Carl G

68

오류 함수에 연결된 속성 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모듈의 일부이며 해당 문서에서 추가로 읽을 수 있습니다 .


1

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.