Node.js 中如何正确处理 Stream 的错误与清理
写 Node.js 服务时,Stream 几乎是绕不开的东西。上传文件、解压归档、转发日志,背后都是流在跑。很多人第一次踩坑的地方不是读不到数据,而是出错之后资源没释放、错误没被捕获,进程挂在那里,内存慢慢涨上去。比如用 pipe() 把一个可读流接到可写流,如果可读流中途 emit 了 error,可写流默认不会自动关闭,文件描述符就一直开着。再比如手动监听 data 事件时忘了处理 end 和 error,请求断掉后回调还在跑。Stream 的错误处理跟普通回调不太一样,错误不一定沿着同一条链路传递,pipeline 和 finished 这两个工具能把大部分边界情况收住。下面从实际代码出...