Json fs.readstream读取对象,然后通过管道将其写入可写文件?

Json fs.readstream读取对象,然后通过管道将其写入可写文件?,json,node.js,object,stream,Json,Node.js,Object,Stream,目前,我有一个模块,可以提取如下sql结果: var writable = fs.createWriteStream("loadedreports/bot"+x[6]); request.on('recordset', function(result) { writable.write(result); }); [{ID:'test',NAME:'stack'},{ID:'test2',NAME:'stack'}] 我只想把它写进文件,这样我以后就可以把它作为一个对象来读了,但我

目前,我有一个模块,可以提取如下sql结果:

 var writable = fs.createWriteStream("loadedreports/bot"+x[6]);
 request.on('recordset', function(result) {
    writable.write(result);
 });
[{ID:'test',NAME:'stack'},{ID:'test2',NAME:'stack'}]

我只想把它写进文件,这样我以后就可以把它作为一个对象来读了,但我想用流来写它,因为有些对象实在太大了,把它们保存在内存中已经不起作用了

我正在使用mssql

我被困在这里:

    request.on('recordset', function(result) {
        console.log(result);
    });
如何将其流式输出到可写流?我看到了对象模式的选项,但我似乎不知道如何设置它

    request.on('recordset', function(result) {
        var readable = fs.createReadStream(result),
            writable = fs.createWriteStream("loadedreports/bot"+x[6]);
        readable.pipe(writable);
    });
这只是错误,因为createReadStream必须是文件路径


我在这条路上走对了吗?还是我需要做些别的事情?

你几乎走对了方向:你不需要一个可读的流,因为你的数据已经分块到达了

然后,您可以在实际的
'recordset'
-事件之外创建可写流,否则每次获得新块时都会创建一个新流(这不是您想要的)

试着这样做:

 var writable = fs.createWriteStream("loadedreports/bot"+x[6]);
 request.on('recordset', function(result) {
    writable.write(result);
 });
编辑

如果记录集已经太大,请使用
-事件:

   request.on('row', function(row) {
   // Same here
   });

我收到一个类型错误:无效的非字符串/缓冲区chunkI添加了JSON.stringify(result),然后将其用作我的writable.write(stringified),这似乎有效。很明显,它改变了我的目标,但我想这也可以。现在我必须改变我现在读取文件的方式。谢谢这很奇怪。。。您是否通过设置选项“stream:true”启用了流式传输(我想是的,否则可能无法工作)?您使用的是resultset还是row事件?您是否侦听了
done
-事件,然后关闭writestream?我没有这样做。我不知道如何收听“完成”并关闭writestream。像这样的?on('done',function(end){writable.close(end);});实际上,在阅读本文时,我不需要使用fs.close。那会是什么问题呢?我猜MSSQL流在写入后仍然保持每一行的静止。我需要排空MSSQL部分