gpt4 book ai didi

Node.js - 如何处理流错误事件

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:09 24 4
gpt4 key购买 nike

我正在从 fs.createReadStream() 返回的文件流中读取数据,并将其传输到使用 zlib.createGzip() 创建的 gzip 流,然后将 gzip 流传输到 HTTP 响应。

我不确定如何处理这些流上的“错误”事件。我只想确保关闭所有流,记录错误,并且没有资源泄漏(请注意,文件流已将 autoClose 设置为 true)。

例如,如果 fs 读取流发生错误,这将如何影响 gzip 流和响应流? “错误”事件会自动传播,还是只是未处理并使我的应用程序崩溃?我应该在每个流上监听“错误”事件还是只在链中的最后一个流上监听?如果我在 fs 流上收听“错误”会发生什么 - gzip 流是否仍会检测到发生了错误?

最佳答案

从一个流到另一个流的错误不会在管道上传播,因此您应该将错误监听器附加到两个流。

如果 fs 读取流有错误,如果 autoClose 为真则它将被销毁(它将清理并关闭文件描述符)。但是 gzip 流不会关闭,因此您必须手动关闭它。

如果 gzip 有错误,它只会发出错误。它不会关闭,可读流也不会关闭。

看看其他流,比如fs write stream,如果写入发生错误,那么它会关闭可写流,但可读流会保持打开状态。

所以我的建议是,在所有流上设置错误处理程序并且不要依赖它们自己在错误时关闭,因此对所有流调用 .close.destroy错误。

为确保您正在监听所有错误处理程序,请使用 domains .

关于Node.js - 如何处理流错误事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com