Node.js में नई लाइन में कैसे संलग्न करें


94

मैं Node.js का उपयोग करके लॉग फ़ाइल में डेटा को जोड़ने की कोशिश कर रहा हूं और यह ठीक काम कर रहा है लेकिन यह अगली पंक्ति में नहीं जा रहा है। \nनीचे मेरे फ़ंक्शन में काम नहीं कर रहा है। कोई सुझाव?

function processInput ( text ) 
{     
  fs.open('H://log.txt', 'a', 666, function( e, id ) {
   fs.write( id, text + "\n", null, 'utf8', function(){
    fs.close(id, function(){
     console.log('file is updated');
    });
   });
  });
 }

4
क्या आप विंडोज पर हैं / अपनी फाइल को देखने के लिए विंडोज-आधारित टेक्स्ट एडिटर का उपयोग कर रहे हैं, और इस तरह एक CRLF जोड़ी की आवश्यकता है \r\n?
Phrogz

जवाबों:


153

ऐसा लगता है कि आप इसे विंडोज पर चला रहे हैं (आपकी H://log.txtफ़ाइल पथ दी गई है )।

\r\nबस के बजाय का उपयोग करने का प्रयास करें \n

ईमानदारी से, \nठीक है; आप शायद नोटपैड या कुछ और में लॉग फ़ाइल को देख रहे हैं जो गैर-विंडोज नईलाइन्स को प्रस्तुत नहीं करता है। एक अलग दर्शक / संपादक (जैसे वर्डपैड) में इसे खोलने का प्रयास करें।


2
नोटपैड में देख रहा था :)
फेसप्लेम

नोटपैड ++ में FYI करें आप संवाद के निचले भाग में चयनित "विस्तारित" खोज मोड के साथ सभी "\\ n" को "\ n" पा सकते हैं।
आकर्षित किया

91

इसके बजाय os.EOL स्थिरांक का उपयोग करें।

var os = require("os");

function processInput ( text ) 
{     
  fs.open('H://log.txt', 'a', 666, function( e, id ) {
   fs.write( id, text + os.EOL, null, 'utf8', function(){
    fs.close(id, function(){
     console.log('file is updated');
    });
   });
  });
 }

13
(१/२) कृपया ध्यान दें कि चूंकि नोड.जेएस कई अलग-अलग वातावरणों पर चल सकता है, इसलिए हो सकता है कि आपके एप्लिकेशन को विंडोज वातावरण को लिनक्स के लिए कहने से संभव हो। इसका मतलब है कि यदि आपका एप्लिकेशन लॉग का उपयोग os.EOLकर रहा है, तो आपके पास कुछ पंक्तियाँ होंगी जो /r/nउस समय (जब ऐप विंडोज़ पर चल रहा था) के साथ समाप्त हो रही होगी और तब आपके पास बस /n(जब ऐप लिनक्स पर चलती है) के साथ पंक्तियाँ समाप्त होंगी । यह विशेष रूप से लॉग फ़ाइलों के किसी भी स्वचालित पार्स करने की जगह होने पर कुछ परेशानी देने की क्षमता रखता है। मैंने सिर्फ इस्तेमाल करने का फैसला किया /n
शर्की

1
(2/2) फिर भी मैंने आपके उत्तर को सही ठहराया क्योंकि यह एक सही-नियंत्रित दुनिया में रहता था।
Sharky

मैं लिनक्स का उपयोग करता हूं, लेकिन इस दृष्टिकोण को पसंद करता हूं क्योंकि मैं भविष्य के उपयोग में पोर्टेबिलिटी चाहता हूं।
sdkks 3

यह सबसे अच्छा जवाब है, क्योंकि यह क्रॉसप्लेट रिकॉर्डर काम करता है।
माइक चेलेन सेप

खैर, मुझे एक ऐसे एप्लिकेशन को पैकेज करना था जो बाइनरी में उपयोग fs.writeकिया os.EOLजाता है। मैं pkgविंडोज के लिए एक बाइनरी उत्पन्न करता था। जब निष्पादित किया जाता है, तो अंतिम लिखित रिकॉर्ड में एक नई पंक्ति होती है जो इसे (अपेक्षित रूप से) जोड़ा जाता है; लेकिन, लगता है जैसे अन्य विंडोज अनुप्रयोगों का इलाज यह एक नया रिकॉर्ड है। मैं एक काम के लिए शिकार कर रहा हूं।
cogitoergosum

0

\r\nनोड जेएस में एक नई लाइन को जोड़ने के लिए संयोजन का उपयोग करें

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.