Node.js – 如何处理stream错误事件

我正在从fs.createReadStream()返回的文件stream中读取数据,并将其pipe道化为使用zlib.createGzip()创build的gzipstream,然后将gzipstreampipe道化为HTTP响应。

我不知道如何处理这些stream上的“错误”事件。 我只是想确保所有的stream被closures,错误被logging下来,没有资源泄漏(注意文件streamautoClose设置为true)。

例如,如果在fs读取stream上发生错误,那么将如何影响gzipstream和响应stream? 这个“错误”事件会自动传播还是只是未处理和崩溃我的应用程序? 我应该听每个stream的“错误”事件,还是只听最后一个stream? 如果我听到fsstream的“错误”,会发生什么情况 – gzipstream是否仍然检测到发生了错误?

从一个stream到另一个stream的错误不会在pipe道上传播,所以您应该将错误侦听器附加到两个stream中。

如果fs读取stream有一个错误,如果autoClose为true,那么它将被销毁(它将清理并closures文件描述符)。 但gzipstream不会被closures,所以你必须手动closures它。

如果gzip有错误,它只会发射它。 它不会被closures,也不会被读取。

查看其他stream,如fs写入stream,如果在写入时发生错误,则会closures可写入stream,但可读stream将保持打开状态。

所以我的build议是,所有的stream设置error handling程序,不要依靠自己closures错误,所以所有的错误调用.close.destroy

要确保您正在侦听所有error handling程序,请使用域 。