Estoy tratando de leer una matriz de objetos, transformarlos y escribir en un archivo en Nodejs, me da el error "El argumento "fragmento" debe ser de tipo cadena o una instancia de Buffer o Uint8Array. Recibí una instancia de Objeto"
Mi código de demostración:
const readStream = stream.Readable.from(res); // I create stream from array of objects This is my custom transform stream: var Transform = stream.Transform; function Flatten(options) { Transform.call(this, options); }; util.inherits(Flatten, Transform); Flatten.prototype._transform = function (chunk, enc, cb) { let obj = chunk; let obj2; for (let j=0; j<obj.inner.length; j++) { let obj1 = obj.inner[j]; obj2 = {...obj, ...obj1}; delete obj2.inner; this.push(new Buffer(obj2)); } cb(); }; Then I have a writable stream: let writeStream = fs.createWriteStream('test1.txt'); Then I pipe all these await pipeline(readStream, tranf, writeStream); that time I am getting the above error, tried using objectMode: true.Podrias ayudarme por favor
en primer lugar, debe agregar una opción para trabajar con object objectMode: true . luego, en lugar de pasar Buffer a this.push() , cambie a cadena con JSON.stringify
const stream = require('stream'); const fs = require('fs'); const res = [{ inner: [1, 2, 3] }, { inner: [4, 5, 6] }, { inner: [7, 8, 9] }]; const Transform = stream.Transform; class Flatten extends Transform { constructor(options) { super(options) } _transform(chunk, enc, cb) { let obj = chunk; let obj2; for (let j = 0; j < obj.inner.length; j++) { let obj1 = obj.inner[j]; obj2 = { ...obj, ...obj1 }; delete obj2.inner; this.push(JSON.stringify(obj2)); } cb(); }; }; const readStream = stream.Readable.from(res); const writeStream = fs.createWriteStream('test1.txt'); const transform = new Flatten({ objectMode: true }) readStream.pipe(transform).pipe(writeStream);