Json fs.readstream读取对象,然后通过管道将其写入可写文件?
目前,我有一个模块,可以提取如下sql结果: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'}] 我只想把它写进文件,这样我以后就可以把它作为一个对象来读了,但我
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部分