Comment ajouter à New Line dans Node.js

94

J'essaie d'ajouter des données à un fichier journal en utilisant Node.js et cela fonctionne bien, mais cela ne passe pas à la ligne suivante. \nne semble pas fonctionner dans ma fonction ci-dessous. Aucune suggestion?

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');
    });
   });
  });
 }
DaBears
la source
4
Êtes - vous sur Windows / en utilisant un éditeur de texte basé sur Windows pour afficher votre fichier, et ont donc besoin d' une paire de CRLF, \r\n?
Phrogz

Réponses:

153

Il semble que vous l'exécutiez sous Windows (compte tenu de votre H://log.txtchemin de fichier).

Essayez d'utiliser \r\nau lieu de simplement \n.

Honnêtement, \nc'est bien; vous visualisez probablement le fichier journal dans le bloc-notes ou quelque chose d'autre qui ne rend pas les sauts de ligne non Windows. Essayez de l'ouvrir dans un autre visualiseur / éditeur (par exemple Wordpad).

Rob Hruska
la source
2
visionnait dans le bloc-notes :)
FacePalm
Pour info dans Notepad ++, vous pouvez trouver tous les "\\ n" remplacer "\ n" avec le mode de recherche "Étendu" sélectionné au bas de la boîte de dialogue.
Tiré
91

Utilisez plutôt la constante 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');
    });
   });
  });
 }
Shinzo
la source
13
(1/2) Veuillez noter que puisque node.js peut fonctionner sur de nombreux environnements différents, il peut être possible de déplacer votre application d'un environnement Windows vers un environnement Linux. cela signifie que si votre application ajoute des journaux en utilisant, os.EOLvous aurez des lignes se terminant par /r/n(à partir du moment où l'application était en cours d'exécution sur Windows), puis vous aurez des lignes se terminant juste par /n(lorsque l'application s'exécute sous Linux). Cela peut poser des problèmes, en particulier si une analyse automatique des fichiers journaux est en place. J'ai décidé de simplement utiliser /n.
Sharky
1
(2/2) Néanmoins, j'ai voté pour votre réponse car ce serait la bonne, si nous vivions dans un monde parfaitement régulé.
Sharky
J'utilise Linux mais j'ai aimé cette approche car je pourrais souhaiter la portabilité lors d'une utilisation future.
sdkks
C'est la meilleure réponse car elle fonctionne sur plusieurs plates-formes.
Mike Chelen
Eh bien, j'ai dû empaqueter une application utilisée fs.writeavec os.EOLdans un binaire. J'avais l'habitude pkgde générer un binaire pour Windows. Lorsqu'il est exécuté, le dernier enregistrement écrit a une nouvelle ligne ajoutée (comme prévu); mais, semble que d'autres applications Windows traitent, c'est un nouveau record. Je cherche une solution de rechange.
cogitoergosum
0

utiliser une \r\ncombinaison pour ajouter une nouvelle ligne dans le nœud js

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
Codemaker
la source