对这个stream可读的语法有点困惑

我读过stream手册,他们有这样的例子:

var Readable = require('stream').Readable; var rs = new Readable; rs.push('beep '); rs.push('boop\n'); rs.push(null); rs.pipe(process.stdout); 

它看起来正是我所需要的(将对象推入可读的stream并将其pipe道化为可写)。

所以这就是我想出来的

 var Readable = require('stream').Readable; var rs = new Readable; app.get('/:foo', function(req, res) { oboe(fs.createReadStream("/file")) .node( "{}", function(data) { rs.push(data) }) rs.pipe(res); 

我正在使用oboe来听取对象的fsStream并修改它们。 目前我推新find的对象到一个数组,然后在“完成”stream事件我会告诉res.json新创build的数组。 这个内存太重了,我想知道是否可以在find并修改对象的时候清空stream,把它推到可读的位置,当可读的stream获取数据时,它会将其stream出去res,但仍然保持一个对象。

不过,我收到这个错误

 Error: not implemented at Readable._read 

这是否意味着stream手册已过时?

你不应该直接使用Readable 。 你应该inheritance它并编写你自己的_read实现; 这就是为什么节点抱怨Readable._read没有被执行。 此外,节点stream需要StringBuffer s,而不是JSON Object ,因此将data从oboe的node事件写入stream可能会导致问题。

我认为这里比使用Readablestream更简单。 这听起来像你想采取双簧pipe给你你的JSON Object ,改变它,并stream出它expression的res对象。 res本身就是一个Writablestream,所以Writable通过中间stream,而是直接write多次,直到完成。 请注意,当oboe完成时,您还必须在响应stream( res )上调用end()

 app.get('/:foo', function(req, res) { oboe(fs.createReadStream("/file")) .node( "{}", function(data) { // ... transform data however you need ... res.write(JSON.stringify(data)); // Note that data is JSON.stringified here since res.write wants a String or a Buffer, not an Object }) .done(function() { res.end(); }) }) 

注意: 我假设在响应的另一端有一些东西可以处理获取JSON对象。 如果你还没有,那么你可能也需要类似双簧pipe这样的东西。