मैं एक्सप्रेस के प्रलेखन के माध्यम से चला गया, और the part describing error handling मेरे लिए पूरी तरह से अपारदर्शी है।node.js में कोड अपवादों को कैसे संभालें?
मुझे लगा कि app
वे एक उदाहरण createServer()
का जिक्र कर रहे हैं, है ना? लेकिन मुझे कोई संकेत नहीं है कि अनुरोध को संभालने के दौरान अपवाद होने पर अनुप्रयोग प्रक्रिया को उड़ाने से node.js को कैसे रोकें।
मुझे वास्तव में कुछ भी कल्पना की आवश्यकता नहीं है; जब भी कोई अपवाद होता है, तो मैं बस 500 की स्थिति और अन्यथा खाली प्रतिक्रिया वापस करना चाहता हूं। नोड प्रक्रिया को समाप्त नहीं करना चाहिए क्योंकि कहीं कहीं अपरिचित अपवाद नहीं था।
क्या यह हासिल करने का एक सरल उदाहरण है?
var express = require('express');
var http = require('http');
var app = express.createServer();
app.get('/', function(req, res){
console.log("debug", "calling")
var options = {
host: 'www.google.com',
port: 80,
path: "/"
};
http.get(options, function(response) {
response.on("data", function(chunk) {
console.log("data: " + chunk);
chunk.call(); // no such method; throws here
});
}).on('error', function(e) {
console.log("error connecting" + e.message);
});
});
app.configure(function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.listen(3000);
पूरे अनुप्रयोग क्रैश हो, ट्रैस बैक उत्पादन
mypath/tst.js:16
chunk.call(); // no such method; throws here
^TypeError: Object ... has no method 'call'
at IncomingMessage.<anonymous> (/Library/WebServer/Documents/discovery/tst.js:16:18)
at IncomingMessage.emit (events.js:67:17)
at HTTPParser.onBody (http.js:115:23)
at Socket.ondata (http.js:1150:24)
at TCP.onread (net.js:374:27)
'सिर्फ इसलिए कि वहाँ प्रक्रिया somewhere.' न आया हुआ अपवाद था *** *** मर जाएगा अगर वहाँ एक * ध्यान में न आया * अपवाद। यदि आप अपवाद होने पर इसे समाप्त नहीं करना चाहते हैं, तो अपवाद पकड़ें और 500 त्रुटि लौटाएं। – Chad
आपको गैर-एक्सप्रेस तरीके से रुचि हो सकती है: http://stackoverflow.com/questions/4213351/make-node-js-not-exit-on-error – Matt
उत्कृष्ट, बहुत धन्यवाद @ मैट! – user124114