如何在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
您是否在Windows上/正在使用基于Windows的文本编辑器来查看文件,因此需要一个CRLF对\r\n
Phrogz

Answers:


153

看起来您正在Windows上运行此H://log.txt文件(给定了文件路径)。

尝试使用\r\n而不是\n

老实说\n很好。您可能正在记事本中查看日志文件或其他无法呈现非Windows换行符的日志文件。尝试在其他查看器/编辑器(例如,写字板)中打开它。


2
在记事本中查看:)
FacePalm 2013年

仅供参考,在Notepad ++中,您可以找到所有“ \\ 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
(1/2)请注意,由于node.js可以在许多不同的环境上运行,因此有可能将您的应用程序从Windows环境迁移到Linux环境。这意味着,如果您的应用程序正在使用追加日志os.EOL,则将有一些行以/r/n(从应用程序在Windows上运行的时间开始)结尾,然后您的行将以/n(以应用程序在linux上运行)结尾。这有可能带来一些麻烦,尤其是在日志文件自动解析到位的情况下。我决定只用/n
Sharky

1
(2/2)不过,如果我们生活在一个受到良好管制的世界中,我赞成您的回答,因为它是正确的答案。
Sharky

我使用linux,但喜欢这种方法,因为我可能希望在将来使用时具有可移植性。
sdkks '16

这是最好的答案,因为它可以跨平台工作。
Mike Chelen

好了,我只好包使用的应用fs.writeos.EOL成二进制。我曾经pkg为Windows生成二进制文件。执行后,最后写入的记录将附加新行(如预期);但是,似乎其他Windows应用程序将其视为一个新记录。我正在寻找解决方法。
cogitoergosum

0

使用\r\n组合在节点js中添加新行

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.