Use zlib. createGzip / createDeflate to get an instance of the compressor you need, with parameters in the object.
If you want to do it all in memory:
var zlib = require('zlib'); // create a new gzip object var gzip = zlib.createGzip({ level: 9 // maximum compression }), buffers=[], nread=0; // attach event handlers... gzip.on('error', function(err) { gzip.removeAllListeners(); gzip=null; }); gzip.on('data', function(chunk) { buffers.push(chunk); nread += chunk.length; }); gzip.on('end', function() { var buffer; switch (buffers.length) { case 0: // no data. return empty buffer buffer = new Buffer(0); break; case 1: // only one chunk of data. return it. buffer = buffers[0]; break; default: // concatenate the chunks of data into a single buffer. buffer = new Buffer(nread); var n = 0; buffers.forEach(function(b) { var l = b.length; b.copy(buffer, n, 0, l); n += l; }); break; } gzip.removeAllListeners(); gzip=null; // do something with `buffer` here! }); // and finally, give it data to compress gzip.write(inputBuffer); gzip.end();
Of course, if you are dealing with large amounts of data, put the output in a file rather than buffering everything in memory.
source share