2017-09-26 83 views
0

我試圖寫一個對象到流:如何將對象寫入流?

const fs = require('fs'); 

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

stream.end(); 

按照documentation,我能做到這一點,通過選擇{objectMode: true},但我得到一個錯誤:

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) 

節點的版本是8.4.0

回答

0

objectMode只適用於支持它的流,而fs流不支持(它們不知道序列化對象)。

你可以寫它之前字符串化數據:

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

,或者可能使用JSONStream(但是,這取決於你的使用情況,如果這是有用與否)。

0

您引用了錯誤的文檔。 爲createWriteStream的選項記錄here

options < string> | < Object>

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

你引用的頁面描述接口,這樣當你實例化接口的實現,你指定stream.write({"a":1});是否是合法的操作或不。