mercredi 1 avril 2015

Collect data from a readable stream into a variable

I'm trying to implement a writable stream that will save the data that is written to it into a variable. This is the implementation of the writable stream:



var util = require('util');
var Writable = require('stream').Writable;

function Collector()
{
Writable.call(this, {objectMode: true});
this.entities = [];
};

util.inherits(Collector, Writable);

Collector.prototype._write = function (chunk, encoding, callback)
{
this.entities.push(chunk);
callback();
};


module.exports = Collector;


and this is how I'm trying to test it it out:



var fs = require('fs');
var Tokenizer = require('./tokenizer');
var Processor = require('../parser');
var Collector = require('./collector.js');

var tokenizer = new Tokenizer();
var processor = new Processor();
var collector = new Collector();

var readable = fs.createReadStream('./test/fixtures/test.dxf');

readable.pipe(tokenizer)
.pipe(parser)
.pipe(processor); // if this is piped to stdout, lots of data

console.log(collector.entities); // logs an empty array


I'm not sure why, but the entities property is empty after all it has been piped. If I console log this.entities within the _write function, the data is available.


Ultimately I want to be to call a function that returns an array whose elements are made up of data chunks from Processor. Collector was some hacking to see how I could do it, but I haven't gotten very far.


How can I store chunks from a readable stream into a variable and return them from a function?


Aucun commentaire:

Enregistrer un commentaire