Gunzip.zlibOnError会把整个node进程崩掉
发布于 2 年前 作者 hzqst 1702 次浏览 来自 问答

关键代码 var rawstream = new Readable({ highWaterMark : 128 * 1024, read(size) { } });

rawstream.pipe(zlib.createGunzip())

然后后续会不停的rawstream.push一些binary的数据

有时候客户端可能会传过来损坏的gzip数据 然后就会Gunzip.zlibOnError 把整个node进程崩掉 我试了rawstream.on(‘error’, function(err){

}); 并不能捕获到error 求教 有什么办法至少能不让node崩掉?

7 回复

正常的捕获pipe两端异常,就是分别监听error事件,你是不是只监听了读流,没监听写流? 另外,一旦error发生了,要记得close


进程的异常是通过process.on('uncaughtException')监听的,但这个是兜底处理意外的,不建议明知道会异常还用uncaughtException处理,已知会有的异常应该主动处理。

@soda-wy 也就是说zlib.createGunzip()创建出的这个stream,也要自己on('error’监听 才行?

@hzqst 恩,pipe两边,都有可能有自己的错误。听你的描述,是右边在报错

@hzqst 可能在你都明白了之后,会觉得pump挺好用的

@soda-wy 谢了,问题已经很完美的解决了!

回到顶部