我正在尝试将一个对象写入流:
const fs = require('fs');
const stream = fs.createWriteStream('index.json', {objectMode: true});
stream.write({"a":1});
stream.end();
Run Code Online (Sandbox Code Playgroud)
根据文档,我可以通过传递选项来做到这一点{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)
Run Code Online (Sandbox Code Playgroud)
节点版本是8.4.0
objectMode仅适用于支持它的流,而fs流则不支持(它们不知道将对象序列化为什么)。
您可以在写入数据之前将其字符串化:
stream.write(JSON.stringify({"a":1}));
Run Code Online (Sandbox Code Playgroud)
或者,可能使用JSONStream(但是,这是否有用取决于您的用例)。