我有以下解析器:
函数Parser(options){ options = options || {}; // options.objectMode = true; options.encoding ='utf8'; Transform.call(this,options); this._rawHeader = []; this.header = null; } util.inherits(Parser,Transform); Parser.prototype._transform = function(数据,编码,完成){ this.push(this._parseRow(data)); 完毕(); }; //将数据行解析为对象 Parser.prototype._parseRow = function(row){ varfields = row.split(“;”); var obj = {代码:fields [0],名称:fields [1] .trim()}; 返回obj.toString(); }; var parser = new Parser({}); //用管道传输流 process.stdin .pipe(parser) .pipe(process.stdout);
但是,我得到:
ACARIT21012; CASSA RURA 在Parser._parseRow(/Users/pmu/projects/b/s/lib/parser.js:38:20) 处Parser._transform(/ Users / pmu / projects / b / s / lib / parser.js:32:18 (位于Parser.Transform._read(_stream_transform.js:179:10)( 位于parser.Transform._write(_stream_transform.js:167:12)) 位于doWrite(_stream_writable.js:219) :10) 位于parser.Writable.write(_stream_writable.js: 180:11 )处于writeOrBuffer(_stream_writable.js:209:5)处于 写入(_stream_visible.js:573:24)时 处于流(_stream_visible.js:582:7) ) 在Socket.pipeOnReadable(_stream_read.js:614:5)
我怀疑流已中断,但不确定如何防止这种情况发生
传递给Readable
流的数据是Buffer
对象,而不是String
。ABuffer
没有split
方法。您必须手动调用toString()
数据才能将其作为进行操作String
。
Parser.prototype._transform = function(data, encoding, done) {
this.push(this._parseRow(data.toString()));
done();
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句