如何将对象写入流?

时间:2017-09-26 08:20:44

标签: node.js stream

我正在尝试将一个对象写入流:

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

2 个答案:

答案 0 :(得分:1)

objectMode仅适用于支持它的流,fs流不支持(他们不知道将对象序列化为的内容)。

您可以在编写数据之前对数据进行字符串化:

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

或者,可能使用JSONStream(但是,如果这有用或非有用,则取决于您的用例)。

答案 1 :(得分:1)

您引用了错误的文档。 createWriteStream的选项记录在here

  

选项&lt;串GT; | &LT;对象&gt;

     
      
  • flags&lt;串GT;
  •   
  • 编码&lt;串GT;
  •   
  • fd&lt;整数&GT;
  •   
  • 模式&lt;整数&GT;
  •   
  • autoClose&lt;布尔&GT;
  •   
  • start&lt;整数&GT;
  •   

您引用的页面描述了该接口,因此在实例化接口的实现时,您可以指定stream.write({"a":1});是否为有效操作。