【发布时间】:2014-06-15 16:26:57
【问题描述】:
我使用 nodejs 流作为数据处理的管道。我遇到的问题是,一旦我的 writeStream 目标发出错误,管道就会停止将数据流向 writeStream。事实上,看起来pipe 就是这样实现的。一旦发出一个错误,writeStream 就会从管道中分离出来。 https://github.com/joyent/node/blob/master/lib/stream.js#L89-112
这对于我想要的东西来说似乎有点激进。我希望能够记下错误,但要保持管道运行。我该怎么做?
我的直播如下所示:
client.readStream()
.pipe(process1)
.pipe(process2)
.pipe(process3)
.pipe(mongo.writeStream())
.on('data', console.log)
.on('error', console.log);
process1、process2、process3 被实现为事件流库中的 .map()。
mongo 写入流如下所示。
function MongoStream(_mongo) {
Stream.Writable.call(this, { objectMode : true });
}
util.inherits(MongoStream, Stream.Writable);
MongoStream.prototype._write = function (model, encoding, callback) {
var self = this;
console.log("Saving model");
model.save(function(err, result) {
if(err){
self.emit('error', err);
} else {
console.log("model saved");
self.emit('data', result);
}
callback();
});
};
读取流只是来自猫鼬模型的.find().stream()
【问题讨论】:
标签: node.js