मेरे पास एक node.js स्क्रिप्ट है जो कुछ लिखने के लिए फ़ाइल में लॉगिंग करता है। कुछ घटनाओं पर मैं स्क्रिप्ट के निष्पादन को रोकना चाहता हूं, यानी इसके बाद तुरंत लॉग इन करने और बाहर निकलने की चेतावनी दी जाती है। asyncronious Node.js होने के नाते हमारे जैसे सीधे आगे यह करने के लिए अनुमति नहीं देता:लॉग संदेश के साथ node.js स्क्रिप्ट से बाहर निकलने का सही तरीका क्या है?
#!/usr/local/bin/node
var fs = require('fs');
var stream = fs.createWriteStream('delme.log', { flags: 'a' });
stream.write('Something bad happened\n');
process.exit(1);
इसके बजाय संदेश जोड़कर इस स्क्रिप्ट फ़ाइल के साथ कुछ नहीं करता है delme.log के। 'निकास' घटना को संभालना और फ़्लशिंग काम नहीं करता है। एक ही रास्ता अब तक पाया exitting से पहले अंतिम लॉग संदेश लिखने के लिए setTimeout()
में process.exit(1)
रैप करने के लिए है:
#!/usr/local/bin/node
var fs = require('fs');
var stream = fs.createWriteStream('delme.log', { flags: 'a' });
stream.write('Something bad happened\n');
setTimeout(function(){
process.exit(1);
}, 30);
हालांकि इस रूप में यह स्क्रिप्ट निष्पादन तुरंत बंद नहीं करता है और स्क्रिप्ट कुछ के लिए चल रहे हो जाएगा महत्वपूर्ण घटना के बाद समय हुआ। तो मैं सोच रहा हूं कि एक लॉग संदेश के साथ एक स्क्रिप्ट से बाहर निकलने के अन्य तरीके हैं?
धन्यवाद! यह setTimeout() कॉल की एक भिन्नता है, जो स्क्रिप्ट निष्पादन को अवरुद्ध नहीं करता है। यदि कोई ऐसा कोड है जिसे अपवाद के बाद निष्पादित नहीं किया जाना चाहिए तो यह पैटर्न चिंता का विषय बन सकता है। – nab
मेरा उत्तर अपडेट किया गया। – fent
मेरे विशेष मामले में मैं लॉगिंग के लिए WriteStream का उपयोग करता हूं, ताकि वास्तविक कॉल लॉग हो। आतंक ('कुछ बुरा हुआ') जो उचित लॉग स्तर के साथ संदेश को कुछ अन्य सामान जोड़ता है। इसलिए लॉगर इंटरफ़ेस को बदले बिना इस स्निपेट को कार्यान्वित करना मुश्किल होगा। मैं अपने समाधान को वैकल्पिक समाधान के रूप में पोस्ट कर रहा हूं। प्रारंभिक प्रश्न पूरी तरह उत्तर दिया गया है। धन्यवाद! – nab