[英]Not able to stream object array from transform stream nodejs
我正在嘗試讀取對象數組,將它們轉換並寫入 Nodejs 中的文件,它給了我錯誤““塊”參數必須是字符串類型或 Buffer 或 Uint8Array 的實例。收到對象的實例“
我的演示代碼:
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.
能否請你幫忙
首先,您需要添加一個選項來使用對象objectMode: true
。 然后不是將 Buffer 傳遞給this.push()
而是使用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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.