任何人都可以解释为什么在使用节点v0.10.21运行以下代码后会收到错误?
我知道我可以JSON.stringify()该对象为了实现或多或少的相同的结果,这里的意义是在objectMode设置为true时对stream.Readable有意义.
错误:
net.js:612 throw new TypeError('invalid data'); ^ TypeError: invalid data at WriteStream.Socket.write (net.js:612:11) at write (_stream_readable.js:583:24) at flow (_stream_readable.js:592:7) at _stream_readable.js:560:7 at process._tickCallback (node.js:415:13) at Function.Module.runMain (module.js:499:11) at startup (node.js:119:16) at node.js:901:3
代码:
var stream = require('stream'); var edad = require(__dirname + '/public/edad.json'); var rs = new stream.Readable({ objectMode: true }); rs.push(edad); rs.push(null); rs.pipe(process.stdout);
解决方法
rs是一个objectMode流,但是process.stdout不是,所以它期望写入Buffer实例.由于它的数据类型不正确,因此会导致错误.
如果您希望能够管理这样的对象,则需要具有支持以对象形式写入并以Buffers的形式读取的中间流.
这样的事情
var stream = require('stream'); var util = require('util'); function StringifyStream(){ stream.Transform.call(this); this._readableState.objectMode = false; this._writableState.objectMode = true; } util.inherits(StringifyStream,stream.Transform); StringifyStream.prototype._transform = function(obj,encoding,cb){ this.push(JSON.stringify(obj)); cb(); }; var edad = require(__dirname + '/public/edad.json'); var rs = new stream.Readable({ objectMode: true }); rs.push(edad); rs.push(null); rs.pipe(new StringifyStream()).pipe(process.stdout);