如何使用 Node.js 创建带缓冲区的读取流
How to create a readstream with a buffer using Node.js
我有这个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
使用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);
});
});
我有这个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
使用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);
});
});