express - 有没有办法知道数据是否正在通过管道传输到快速响应中?
问题描述
如果我有一个Readable
流,我可以通过管道将其响应如下:
app.use(function(req, res) {
stream.pipe(res);
});
如果我面前没有这段代码,但我确实可以访问该
res
对象,有没有办法知道有什么东西正在被输入它?并知道它何时完成?我注意到我仍然可以使用
res.send()
,并且res.end()
在传输某些内容时,响应会发生什么?有规则吗?
解决方案
存在可写流的
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()
如下所示。由于res
是一个流,我最好的猜测是它取决于。您可以有多个项目写入/管道到res
,但 A 可能在 B 之前完成,因此 B 的内容可能会替换 A 的内容,反之亦然。
推荐阅读
- php - 当属性和值在 XML 字符串中时 simplexml_load_string 不起作用
- c - 在重复的 FreeRtos 任务中使用静态函数
- html - MDB 拖放 ui 对我不起作用?
- c++ - 我们如何搜索单链表中的记录?
- mysql - 子句中的mysql案例
- sql - 带有子选择的 SQL 条件连接
- firebase - firebase 云功能:使用锐利库创建缩略图不会生成访问令牌
- .net - 从 Wix 安装程序中的自定义操作运行 .Net 安装程序?
- windows - 仅用于标准输出的 cmd 和 powershell 的替代品
- excel - VBA中的半冒号分隔的csv