2017-09-26 2 views
0

Je suis en train d'écrire un objet au flux:Comment écrire un objet dans le flux?

const fs = require('fs'); 

const stream = fs.createWriteStream('index.json', {objectMode: true}); 
stream.write({"a":1}); 

stream.end(); 

Selon le documentation, je peux le faire, l'option passant {objectMode: true}, mais je me fais une erreur:

events.js:182 
     throw er; // Unhandled 'error' event 
    ^

Error: Invalid data 
    at WriteStream._write (fs.js:2116:31) 
    at doWrite (_stream_writable.js:385:12) 
    at writeOrBuffer (_stream_writable.js:371:5) 
    at WriteStream.Writable.write (_stream_writable.js:288:11) 
    at Object.<anonymous> (/Users/rostik404/projects/test-project/test-stream.js:8:8) 
    at Module._compile (module.js:573:30) 
    at Object.Module._extensions..js (module.js:584:10) 
    at Module.load (module.js:507:32) 
    at tryModuleLoad (module.js:470:12) 
    at Function.Module._load (module.js:462:3) 

version du noeud est 8.4.0

Répondre

0

objectMode ne fonctionne que pour les flux qui le supportent, et fs cours d'eau ne le font pas (ils ne savent pas quoi sérialiser l'objet à).

Vous pouvez stringify les données avant de l'écrire:

stream.write(JSON.stringify({"a":1})); 

Ou, peut-être, utilisez JSONStream (cependant, cela dépend de votre cas d'utilisation si cela est utile ou non).

0

Vous faites référence à une documentation incorrecte. Les options pour createWriteStream sont documentées here:

options < string> | < Object>

  • flags < string>
  • encoding < string>
  • fd < integer>
  • mode < integer>
  • autoClose < boolean>
  • start < integer>

La page que vous référencez décrit l'interface, de sorte que lorsque vous instancier une implémentation de l'interface, vous spécifiez si stream.write({"a":1}); est une opération valide ou non.