2014-05-17 6 views
20

ठीक है, मुझे घना होना चाहिए क्योंकि मुझे नोड.जेएस http.get या http.request का उपयोग करते समय त्रुटि स्थिति कोड कैसे प्राप्त करें। मेरे कोड:http NodeJS त्रुटि स्थिति कोड कैसे प्राप्त करें?

var deferred = $q.defer(); 

    var req = https.get(options, function(response){ 
     var str = ''; 
     response.on('data', function (chunk) { 
      str += chunk; 
     }); 
     response.on('end', function() { 
      console.log("[evfService] Got user info: "+str); 
      deferred.resolve(str); 
     }); 


    }); 

    req.on('error', function(e){ 
     deferred.reject(e); 
    }); 

कि "req.on" बिट में, क्या मैं चाहता हूँ HTTP स्थिति कोड (अर्थात 401, 403, आदि) है। मुझे जो मिलता है वह अर्ध-बेकार त्रुटि ऑब्जेक्ट है जो मुझे कोड या प्रतिक्रिया ऑब्जेक्ट का कोई संदर्भ नहीं देता है। मैंने फ़ंक्शन (प्रतिक्रिया) कॉलबैक में अवरोध करने की कोशिश की है, लेकिन जब 404 है, तो इसे कभी नहीं कहा जाता है।

धन्यवाद!

+0

आप response.statusCode की कोशिश की थी? – radubogdan

उत्तर

33

आपका कॉलबैक सर्वर से प्रतिक्रिया स्थिति कोड के बावजूद कॉल किया जाता है, इसलिए आपके कॉलबैक के भीतर, response.statusCode देखें। यही है, आप जिस स्तर पर काम कर रहे हैं उस पर एक 4xx स्टेटस कोड त्रुटि नहीं है; सर्वर ने जवाब दिया, यह सिर्फ इतना है कि सर्वर ने यह कहकर जवाब दिया कि संसाधन उपलब्ध नहीं था (आदि)

यह in the documentation है लेकिन विशेष रूप से अस्पष्ट है। आप कोशिश करते हैं कि साथ (माना) एक अज्ञात संसाधन, आप statusCode: 404 देखेंगे

var https = require('https'); 

https.get('https://encrypted.google.com/', function(res) { 
    console.log("statusCode: ", res.statusCode); // <======= Here's the status code 
    console.log("headers: ", res.headers); 

    res.on('data', function(d) { 
    process.stdout.write(d); 
    }); 

}).on('error', function(e) { 
    console.error(e); 
}); 

: यहाँ उदाहरण वे दे रहा है, एक टिप्पणी प्रासंगिक बिट की ओर इशारा करते हैं।

तो तुम क्या कर रहे हैं के लिए है, तो आप कुछ इस तरह कर सकते हैं:

var deferred = $q.defer(); 

var req = https.get(options, function (response) { 
    var str = ''; 

    if (response.statusCode < 200 || response.statusCode > 299) { // (I don't know if the 3xx responses come here, if so you'll want to handle them appropriately 
     deferred.reject(/*...with appropriate information, including statusCode if you like...*/); 
    } 
    else { 
     response.on('data', function (chunk) { 
      str += chunk; 
     }); 
     response.on('end', function() { 
      console.log("[evfService] Got user info: " + str); 
      deferred.resolve(str); 
     }); 
    } 
}); 

req.on('error', function (e) { 
    deferred.reject(/*...with appropriate information, but status code is irrelevant [there isn't one]...*/); 
}); 
+0

अरे, प्रतिक्रिया कॉलबैक के भीतर से एक पुनः प्रयास करने के तरीके पर कोई विचार '(यदि स्थिति कोड! = 200) 'है? –

+1

@sudosoul: मैं बस एक समारोह में पूरी बात डाल चाहते हैं और, अगर आप फिर से प्रयास करना चाहते हैं, है कि समारोह प्रतिक्रिया कॉलबैक से खुद को कहते हैं। –

4

एक 400 प्रतिक्रिया node.js. द्वारा एक त्रुटि नहीं माना जाता है इस में

कोशिश response.statusCode: request.on ('प्रतिक्रिया', समारोह (प्रतिक्रिया) {});

1

यहाँ एक बहुत ही छोटा सा उदाहरण है कि कैसे त्रुटि कोड प्राप्त करने के लिए है। बस http को https बदल सकते हैं और एक त्रुटि बनाने के लिए:

var https = require('https') 
var username = "monajalal3" 
var request = https.get("https://teamtreehouse.com/" + username +".json", function (response) { 
    console.log(response.statusCode); 
}); 

request.on("error", function (error) { 
    console.error(error.status); 
}); 
संबंधित मुद्दे