LevelUP Documentation には、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)
実際の問題は、イベント 'data' () を使用するときのメモリ使用量に関するものです。次に、stream.Transform を作成し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);