如何使用 Node.js 创建带有缓冲区的读取流

Posted

技术标签:

【中文标题】如何使用 Node.js 创建带有缓冲区的读取流【英文标题】:How to create a readstream with a buffer using Node.js 【发布时间】:2016-10-16 11:22:46 【问题描述】:

我有这个json:

var myJSON = '"kind": "person", "fullName": "Rivka3"';

我正在尝试使用 createReadStream 将其上传到 bigquery。 当我在本地保存它时,我成功了:

fs.writeFile("/tmp/bq_json_file_new.json", myJSON, function(err));
fs.createReadStream("/tmp/bq_json_file_new.json")
  .pipe(table.createWriteStream(metadata))
  .on('complete', function(job) 
    job
      .on('error', console.log)
      .on('complete', function(metadata) 
        console.log('job completed', metadata);
      );
  );

现在我尝试在不本地保存的情况下执行此操作 - 使用缓冲区:

fs.createReadStream(new Buffer(myJSON, "utf8"))
  .pipe(table.createWriteStream(metadata))
  .on('complete', function(job) 
    job
      .on('error', console.log)
      .on('complete', function(metadata) 
        console.log('job completed', metadata);
      );
  );

但我收到此错误:

fs.js:575
  binding.open(pathModule._makeLong(path),

TypeError: path must be a string

【问题讨论】:

【参考方案1】:

使用stream 解决问题:

var stream = require('stream');

var bufferStream = new stream.PassThrough();

bufferStream.end(new Buffer(myJSON));

bufferStream.pipe(table.createWriteStream(metadata))
                   .on('complete', function(job) 
                     job
                       .on('error', console.log)
                       .on('complete', function(metadata) 
                         console.log('job completed', metadata);
                       );
                   );

【讨论】:

以上是关于如何使用 Node.js 创建带有缓冲区的读取流的主要内容,如果未能解决你的问题,请参考以下文章

Node.js文件系统路径的操作函数

Node.js 如何读取带有 HTTP 地址元素的 JSON

在 node.js 服务器上使用 supertest/superagent 读取响应输出缓冲区/流

如何在 Node.js 中读取文件内容并将数据转换为 JSON?

使用 Node.js 打开 23 端口读取数据

Protobuf 和 Node.JS 库错误