【问题标题】:How to create a readstream with a buffer using Node.js如何使用 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

【问题讨论】:

    标签: node.js google-bigquery buffer fs node-streams


    【解决方案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);
                           });
                       });
    

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 2012-03-02
      • 2023-03-22
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2019-03-06
      相关资源
      最近更新 更多