我有以下解析器:
函数分析器(选项){options=选项||{};//options.objectMode=true;options.encoding='utf8';Transform.call(this,options);这个_rawHeader=[];this.header=null;}util.inherits(Parser,Transform);Parser.prototype._transform=函数(数据,编码,完成){this.push(this._parseRow(data));done();};//将数据行解析为对象Parser.prototype_parseRow=函数(行){var fields=行.split(";");var obj={code:fields[0],name:fields[1].trim()};return obj.toString();};var parser=新的parser({});//用管道输送溪流进程.stdin.pipe(解析程序).pipe(process.stdout)
但是,我得到:
ACARIT2012;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)在writeOrBuffer(_stream_writeable.js:209:5)在Parser.Writable.write(_stream_Writable.js:180:11)写入时(_stream_readable.js:573:24)流量(_stream_readable.js:582:7)在Socket.pipeOnReadable(_stream_readable.js:614:5)
我怀疑流被破坏了,但不知道如何防止这种情况发生
传递给Readable
流的数据是Buffer
对象,而不是String
。Buffer
没有split
方法。必须对数据手动调用toString()
,才能将其作为String
进行操作。
Parser.prototype._transform = function(data, encoding, done) {
this.push(this._parseRow(data.toString()));
done();
};