অ্যাঙ্গুলারজেএস-এ কীভাবে $ রিসোর্স পরিষেবা ত্রুটিগুলি পরিচালনা করবেন


96

আমি আমার এপিআইতে অনুরোধ করছি এবং আমি AngularJS $ রিসোর্স মডিউলটি ব্যবহার করছি। এটি $ 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');
            });

উত্তর:


180

আপনি ত্রুটি হ্যান্ডলারটিকে দ্বিতীয় প্যারামিটার হিসাবে পাস করতে পারেন 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
});

4
ডকুমেন্টেশনে এটি দেখতে তৃতীয় প্যারামিটারের মতো দেখতে ত্রুটি কলব্যাক। " রিসোর্স.অ্যাকশন
মার্সেল

4
এই সংস্থানটির সমস্ত ব্যবহারের ক্ষেত্রে সাধারণ কোনও ডিফল্ট ত্রুটি হ্যান্ডলার সংজ্ঞায়িত করার কোনও উপায় আছে (উদাহরণস্বরূপ "সার্ভার দ্বারা অনুমোদিত সংস্থানটি"?
নিকোলাস জ্যানেল

4
@NicolasJanel আপনি একটি ফাংশন যা তাহলে কি হ্যান্ডেল করবে সংজ্ঞায়িত করতে পারে Resource.query().$promise.then(function(data) {}, errorFunction)। আপনি এখনও কোনও ক্যোয়ারী ব্যবহার করেছেন এমন প্রতিটি জায়গাতেই আপনাকে এটি অন্তর্ভুক্ত করতে হবে, তবে কমপক্ষে আপনি প্রতিবার এটি পুনরায় সংজ্ঞায়িত করবেন না।
schillingt

@ ওলকিরিলভ আমি আপনার প্রশংসা করব যদি আপনি এই প্রশ্নের উত্তর হিসাবে এটি গ্রহণ করেন
মার্কো.ইগ ২

4
যেমন উদাহরণ হিসেবে বলা যায় পদ্ধতি ফেরত মান @Kaspar myResource.$saveএবং myResource.$deleteপ্রতিশ্রুতি। সুতরাং আপনি ঠিক করতে পারেন myResource.$save().then(...)
কার্ল জি

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

resourceErrorHandlerপেতে বা ক্যোয়ারী পদ্ধতিতে প্রতিটি ত্রুটির জন্য যেখানে একটি ফাংশন বলা হয়। জিজ্ঞাসা করা সমস্যার জন্য, গেট পদ্ধতিটি কেবল প্রয়োজনীয়। অবশ্যই আপনি যে কোনও ক্রিয়াতে এটি প্রয়োগ করতে পারেন।

responseএকটি সাধারণ প্রতিক্রিয়া ধরার জন্য রিসোর্সের জন্য অন্য একটি ইন্টারসেপ্টর বিদ্যমান।

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

ইন্টারসেপ্টরগুলি $httpমডিউলটির অংশ , আপনি তাদের ডক্সে আরও পড়তে পারেন ।


1

আমার এনজি.সোর্সটিতে এখানে একটি নতুন ES6 উদাহরণ (আমি টাইপস্ক্রিপ্ট ব্যবহার করি)

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.