2013-12-14 5 views
95

में $ संसाधन सेवा त्रुटियों को कैसे प्रबंधित करें मैं अपने एपीआई के लिए अनुरोध कर रहा हूं और मैं 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); 
      }); 
... 

मैं इस या की तरह कुछ चाहते हैं .. मैं नहीं जानता कि एक तरह से अगर मेरे एपीआई काम नहीं कर रहा त्रुटियों को संभालने के लिए ..

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

उत्तर

176

आप 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

प्रलेखन में यह तीसरा पैरामीटर त्रुटि कॉलबैक जैसा दिखता है। "संसाधन.एक्शन ([पैरामीटर], [सफलता], [त्रुटि])" http://docs.angularjs.org/api/ngResource.$resource – Marcel

+0

हाँ, यदि आप कॉन्फ़िगर ऑब्जेक्ट पास करते हैं। –

+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 एक समारोह प्राप्त या क्वेरी पद्धति पर प्रत्येक त्रुटि पर कहा जाता है। समस्या के लिए पूछे जाने के लिए, विधि प्राप्त करने की आवश्यकता केवल एक ही है। बेशक आप इसे किसी भी कार्रवाई के लिए लागू कर सकते हैं।

एक अन्य इंटरसेप्टर response सामान्य प्रतिक्रिया प्राप्त करने के लिए $ संसाधन के लिए मौजूद है।

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

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

और फिर मेरी नियंत्रक में पर है, 'विस्तार' नियंत्रक में इंजेक्शन या तो आंकड़ों के हल होगा (अच्छा) या त्रुटि के लिए झूठा, जहां मैं 404 के प्रदर्शन को संभालता हूं।