it-swarm.com.de

Wie man mit $ resource service Fehlern in AngularJS umgeht

Ich stelle Anfragen an meine API und verwende das AngularJS $ -Ressourcenmodul. Es unterscheidet sich von $ http, sodass ich nicht weiß, wie ich mit meinen Fehlern umgehen soll.

Mein Service:

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,

            }
        });
    }]);

Mein Controller:

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

Ich möchte so etwas oder ... Ich weiß nicht, wie ich mit Fehlern umgehen soll, wenn meine API nicht funktioniert ...

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

sie können die Fehlerbehandlungsroutine als zweiten Parameter an query übergeben.

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

EDIT:

um die Sache etwas klarer zu machen, einige Beispiele:

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
});
178
marco.eig

Sie können eine Fehlerbehandlungsroutine im Erstellungsschritt der Ressource definieren, indem Sie in der Beschreibung einer Methode ein interceptor -Objekt mit einer responseError -Eigenschaft hinzufügen, die mit Ihrer Fehlerfunktion verknüpft ist.

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

dabei ist resourceErrorHandler eine Funktion, die bei jedem Fehler beim Abrufen oder bei der Abfragemethode aufgerufen wird. Für das gestellte Problem wird nur die Methode get benötigt. Natürlich können Sie das auf jede Aktion anwenden.

Ein anderer Interceptor response ist vorhanden, damit $ resource eine normale Antwort abfängt.

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

Abfangjäger sind Teil der $http Modul, können Sie weiter lesen Sie über sie in ihren Dokumenten .

68
Nicolas Janel

Hier ist ein neues ES6-Beispiel (ich verwende TypeScript) für meine ng.resource

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

und dann wird in meinem Controller "Detail", das in den Controller eingespeist wird, entweder in die Daten (gut) oder auf Fehler hin in die Daten (falsch) aufgelöst, wobei ich die Anzeige von 404 behandle.

1
httpete