我正在读取从fs.createReadStream()返回的文件流,并将其通过管道传递到使用zlib.createGzip()创建的gzip流,然后通过管道将gzip流传递给HTTP响应。
我不确定如何处理这些流中的“错误”事件。我只想确保关闭所有流,记录错误,并且没有资源泄漏(请注意,文件流的autoClose设置为true)。
例如,如果在fs读取流上发生错误,那将如何影响gzip流和响应流?“错误”事件会自动传播还是只是未处理而崩溃并导致我的应用崩溃?我应该在每个流中还是在链中的最后一个流上侦听“错误”事件?如果我听fs流上的“错误”会发生什么?gzip流是否仍会检测到已发生错误?
从一个流到另一个流的错误不会在管道上传播,因此您应该将错误侦听器附加到两个流上。
如果fs读取流有错误,如果autoClose为true,则将销毁它(它将清理并关闭文件描述符)。但是gzip流不会关闭,因此您必须手动关闭它。
如果gzip有错误,它将发出它。它不会关闭,可读流也不会关闭。
查看其他流,例如fs写流,如果在写时发生错误,则它将关闭可写流,但可读流将保持打开状态。
因此,我的建议是,在所有流上设置错误处理程序,不要依赖于错误自己关闭,因此请调用.close
或.destroy
所有错误。
为确保您正在侦听所有错误处理程序,请使用domains。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句