对这个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需要String
或Buffer
s,而不是JSON Object
,因此将data
从oboe的node
事件写入stream可能会导致问题。
我认为这里比使用Readable
stream更简单。 这听起来像你想采取双簧pipe给你你的JSON Object
,改变它,并stream出它expression的res
对象。 res
本身就是一个Writable
stream,所以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这样的东西。