2016-06-15 46 views
8

ho questo JSON:come creare un readstream con un buffer utilizzando nodejs

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

Sto cercando di uploed a BigQuery, utilizzando createReadStream. quando salvo che localy riesco:

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); 
     }); 
    }); 

ora sto cercando di fare questo senza salvarlo localy - utilizzando un buffer:

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); 
     }); 
    }); 

ma ricevo questo errore:

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

TypeError: path must be a string 

risposta

14

utilizzando stream risolve il problema:

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); 
         }); 
        });