Node.js:TypeError [ERR_INVALID_ARG_TYPE]:“块”参数必须是字符串或缓冲区类型之一。收到的型号

时间:2020-08-02 11:36:22

标签: node.js

我才刚刚开始学习流媒体,我正在尝试将数字写入newfile.txt,但会引发错误:

TypeError [ERR_INVALID_ARG_TYPE]:“块”参数必须是以下参数之一 输入字符串或缓冲区。收到的类型编号

代码

const {Readable,pipeline} = require('stream');
const {createWriteStream} = require('fs');

async function myfunc(){
    const stream = Readable.from(Array.from({length:20},(x,i)=>i+1));
    pipeline(stream,createWriteStream('./newfile.txt'),(err)=>{
        console.log(err);
    })
}

myfunc();

1 个答案:

答案 0 :(得分:0)

pipeline期望第一个参数的类型为ReadableStreamReadable.from返回类型为internal.Readable的值(不是必需的可读流类型),这就是为什么看到错误的原因。

这里是如何使用它的示例(将文件加载为可读流,然后将其推送为写流)。

const { pipeline } = require('stream');
const { createWriteStream, createReadStream } = require('fs');

async function myfunc() {
    const stream = createReadStream('./oldfile.txt');
    pipeline(stream, createWriteStream('./newfile.txt'), (err) => {
        console.log(err);
    });
}

myfunc();

如果要使用pipeline将某些字符串(或对象)推入可写流,而不是加载某些文件的内容,则可以使用Duplex

创建可读的流
const { Duplex, pipeline } = require('stream');
const { createWriteStream } = require('fs');

const b = Buffer.from('some text');
const readStream = Duplex();
readStream.push(b);
readStream.push(null);

pipeline(readStream, createWriteStream('./newfile.txt'), (err) => {
    console.log(err);
});