有没有办法知道是否将数据传递到快速响应中?

时间:2018-12-13 10:32:09

标签: express stream

如果我有Readable流,则可以通过管道将其响应,如下所示:

app.use(function(req, res) {
  stream.pipe(res);
});
  1. 如果我前面没有这段代码,但是我确实可以访问res对象,是否有办法知道正在向其中传送内容?知道何时完成?

  2. 我注意到在管道传输某些内容时,我仍然可以使用res.send()res.end(),那么响应会如何?有规则吗?

1 个答案:

答案 0 :(得分:1)

  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

  1. 不能确切地说,但是您可能会遇到意想不到的副作用。 res.send()最终调用res.end(),如图here所示。由于res是流,所以我最好的猜测是它取决于。您可能有多个项目写入/插入res,但是A可能在B之前完成,因此B的内容可能会替换A的内容,反之亦然。