如果我有Readable
流,则可以通过管道将其响应,如下所示:
app.use(function(req, res) {
stream.pipe(res);
});
如果我前面没有这段代码,但是我确实可以访问res
对象,是否有办法知道正在向其中传送内容?知道何时完成?
我注意到在管道传输某些内容时,我仍然可以使用res.send()
和res.end()
,那么响应会如何?有规则吗?
答案 0 :(得分:1)
对于可写流,存在一个pipe
事件:
在可读流上调用stream.pipe()方法时,会发出
'pipe'
事件,并将此可写操作添加到其目标位置。
所以我认为以下方法可行:
-
export async function myHandler(req, res) {
const reader = getReadableStreamSomehow();
res.on('pipe', src => {
console.log('Something is piping into the response');
assert.equal(src, reader);
});
reader.pipe(res);
}
参考:https://nodejs.org/api/stream.html#stream_event_pipe
res.send()
最终调用res.end()
,如图here所示。由于res
是流,所以我最好的猜测是它取决于。您可能有多个项目写入/插入res
,但是A可能在B之前完成,因此B的内容可能会替换A的内容,反之亦然。