我正在尝试将一个对象写入流:
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 :(得分: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});
是否为有效操作。