2012-08-27 13 views
19

के साथ सर्वर त्रुटि प्रतिक्रिया का प्रबंधन मैं नए, अद्यतन या मॉडल को हटाने पर सर्वर त्रुटि प्रतिक्रिया को प्रबंधित करने का सबसे अच्छा तरीका जानना चाहता हूं। इस समय सर्वर एक http स्थिति कोड # 400 देता है। लेकिन बैकबोन में डिफ़ॉल्ट त्रुटि हैंडलर त्रुटियों को नहीं दिखा रहा है।रीढ़ की हड्डी

मैं इन त्रुटियों को कैसे दिखा सकता हूं?

क्या यह ठीक है कि सर्वर पक्ष सत्यापन विफल होने पर सर्वर HTTP त्रुटि शीर्षलेख देता है? (हो सकता है कि स्थिति = 'त्रुटि' संदेश के साथ सफलता की प्रतिक्रिया बेहतर हो)

उत्तर

20

यदि आप 2XX के अलावा किसी अन्य स्थिति को वापस कर रहे हैं, तो आप नौकरी के साथ पहले से ही आधा रास्ता कर चुके हैं। :-) असल में, आप जो कुछ भी कर सकते हैं उसे वापस प्रतिक्रिया के रूप में वापस भेजना है।

उदाहरण के लिए, तुम सिर्फ वापस कुछ इस तरह भेज सकते हैं:

// Send back http status 500 
echo 'Could not save, server error'; 

500 स्थिति बैकबोन त्रुटि कॉलबैक ट्रिगर किया जाएगा और आपकी प्रतिक्रिया एक jqXHR वस्तु है। उपर्युक्त उदाहरण में आप अपनी त्रुटि कॉलबैक में ऐसा कुछ कर कर संदेश प्राप्त कर सकते हैं।

model.save({},{ 
    error: function(model, response) { 
     console.log(response.responseText); 
    } 
}); 

सर्वर पक्ष की त्रुटि के बारे में कुछ डेटा/संदेश वापस पाने का यह सबसे आसान तरीका है। आप निश्चित रूप से, बना सकते हैं और अधिक परिष्कृत डेटा सर्वर से लौटाया जा रहे हैं:

// I'm using SLIM RESTful framework... 
$dataOut = array('error'=>'Validation type', 'message'=>'Did not validate'); 
$response->body(json_encode($dataOut)); 

एक ही फैशन में, आप तो जैसे कि प्रतिक्रिया पहुँच सकते हैं:

model.save({},{ 
    error: function(model, response) { 
     var responseObj = $.parseJSON(response.responseText); 
     console.log('Type: ' + responseObj.error + ' Message: ' + responseObj.message); 
    } 
}); 

या उन पंक्तियों के साथ कुछ।

E.g. 
response.readyState 
response.status 
response.statusText // etc. 

बैकबोन केवल सर्वर से लौटे http स्थिति की जरूरत है:

क्योंकि प्रतिक्रिया अपने त्रुटि कॉलबैक में पारित कर दिया jqXHR वस्तु है, तो आप उसके गुण के सभी है कि आप उपयोग कर सकते हैं पर पहुंच सकते हैं अपनी बात करने के लिए।

+0

मुझे आज इस मुद्दे का सामना करना पड़ रहा है, वास्तव में। यहां सवाल है: यदि मेरा स्लिम रीस्टफुल एपीआई (सैद्धांतिक रूप से) वेब क्लाइंट (जैसे आईओएस, आदि) के अलावा ग्राहकों द्वारा उपयोग किया जा सकता है, तो क्या यह ठीक है अगर एसएलआईएम इस तरह की परिस्थितियों में गैर-200 HTTP स्टेटस कोड वापस भेज रहा है? ऊपर वर्णित स्थितियां (उदा। फॉर्म सत्यापन त्रुटियां, आदि) तर्कसंगत रूप से सर्वर त्रुटि नहीं हैं, बल्कि सर्वर खराब उपयोगकर्ता इनपुट का सही ढंग से प्रतिक्रिया दे रहा है। – hairbo

+1

मुझे लगता है कि आपकी टिप्पणी 2 भागों है। 1) क्या SLIM गैर-200 http स्टेटस कोड वापस भेजना चाहिए? मैं हां कल्पना करता हूं क्योंकि मैं नहीं देख सकता कि ऐसा करने से यह कैसे संभव होगा। सफलतापूर्वक या त्रुटि कॉलबैक निष्पादित करने के लिए बहुत से क्लाइंट साइड स्टफ उस स्थिति कोड पर निर्भर करती हैं। 2) क्या स्थिति 500 ​​सत्यापन के लिए उपयुक्त है? नहीं। मेरे उदाहरण में - मैंने अभी एक समस्या बनाई है जो सहेजने के लिए एक सर्वर था। मुझे लगता है कि यदि आप सर्वर-साइड सत्यापन कर रहे हैं, तो 400 खराब अनुरोध एक अच्छा विकल्प हो सकता है। – jmk2142

+0

यकीन नहीं है कि मैं सत्यापन त्रुटियों के लिए 5xx का सुझाव दे रहा था, लेकिन यह वास्तव में मुद्दा नहीं है। मुझे लगता है कि मैं सिर्फ एक स्टिकर हूं, लेकिन सर्वर त्रुटि कोड सुझाव देते हैं (मुझे, वैसे भी) कि * सर्वर * के साथ कुछ गलत हो गया है। एक सत्यापन त्रुटि वास्तव में सर्वर * क्लाइंट * से खराब डेटा के लिए ठीक से प्रतिक्रिया दे रहा है। तो कुछ स्तर पर, खराब क्लाइंट डेटा के लिए 4xx के साथ प्रतिक्रिया गलत लगता है। हालांकि, पूरी दुनिया इस तरह से कर रही है, और मैं उस बिंदु पर पूरी दुनिया से लड़ने वाला नहीं हूं। (-; – hairbo

संबंधित मुद्दे