在pipe的链中,error事件并不会在管道中传递,所以,像这样的代码:

var a = createStream();
a.pipe(b).pipe(c).on('error', function(e){handleError(e)});

只会监听stream c的error事件,a或b触发的任意error事件都不会向下传递,而是直接被抛出。所以,正确的处理方式是:

var a = createStream();
a.on('error', function(e){handleError(e)})
.pipe(b)
.on('error', function(e){handleError(e)})
.pipe(c)
.on('error', function(e){handleError(e)});

当一个error事件被触发的时候,并不会显式地触发一个end事件。一个error事件的触发会结束stream。

也可以用domain来处理,此处按下不表,以后有机会再详述。

参考链接