【问题标题】:Not able to stream object array from transform stream nodejs无法从转换流 nodejs 流式传输对象数组
【发布时间】:2022-06-15 14:20:55
【问题描述】:

我正在尝试读取对象数组,将它们转换并写入 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.


你能帮忙吗

【问题讨论】:

    标签: javascript node.js stream nodejs-stream


    【解决方案1】:

    首先,您需要添加一个选项来处理对象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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 2018-07-25
      相关资源
      最近更新 更多