LevelUP 文档说pipe()
可以使用(https://github.com/rvagg/node-levelup/#pipes-and-node-stream-compatibility)。
我试过以下代码:
db.createValueStream().pipe(response)
但我做不到,我有一个错误:
events.js:72
throw er; // Unhandled 'error' event
^
TypeError: Invalid non-string/buffer chunk
at validChunk (_stream_writable.js:150:14)
at Writable.write (_stream_writable.js:179:12)
at write (_stream_readable.js:573:24)
at flow (_stream_readable.js:582:7)
at ReadStream.pipeOnReadable (_stream_readable.js:614:5)
at ReadStream.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
at emitReadable (_stream_readable.js:404:5)
at readableAddChunk (_stream_readable.js:165:9)
at ReadStream.Readable.push (_stream_readable.js:127:10)
实际问题是使用事件“数据”()时的内存使用情况。然后我试着做一个流。转换并pipe()
用来做我需要的。一旦事件发射器中的内存泄漏是一个问题:在 Node.js 中使用流时内存泄漏?
更新
我试过@paul-mougel 没有成功。错误事件的函数没有被调用,它崩溃了。这是一段代码:
var rs = db.createValueStream();
request.on('close', function(){
rs.destroy();
response.end();
});
rs.on('end', function(){
response.end();
});
rs.on('error', function(err){
console.err('READ STREAM ERROR:',err.message);
response.end();
rs.destroy();
});
response.on('error', function(err){
console.log('RESPONSE ERROR:',err);
rs.destroy();
});
rs.pipe(stringifier).pipe(response);