Introduction to Through2
Through2 is a thin wrapper around Node.js Transform streams that simplifies the process of working with streams. This module allows you to transform data streaming from one place to another with ease. It is highly conducive for various Node.js applications involving stream processing.
Basic Usage
Let’s start with a basic example to understand how to use through2 in a Node.js application:
const through2 = require('through2');
process.stdin.pipe(through2(function (chunk, enc, callback) {
this.push(chunk.toString().toUpperCase());
callback();
})).pipe(process.stdout);
Transforming Data
Through2 is predominantly used to transform data. Consider the example below:
const through2 = require('through2');
const transformStream = through2(function (chunk, enc, callback) {
const transformedChunk = chunk.toString().split('').reverse().join('');
this.push(transformedChunk);
callback();
});
process.stdin.pipe(transformStream).pipe(process.stdout);
Creating an Object Mode Stream
Through2 can also work in object mode, where each chunk emitted can be an arbitrary object rather than a Buffer or string:
const through2 = require('through2');
const objectStream = through2.obj(function (obj, enc, callback) {
obj.transformed = true;
this.push(obj);
callback();
});
objectStream.write({ message: 'hello' }); objectStream.pipe(through2.obj((data, enc, callback) => {
console.log(data); // { message: 'hello', transformed: true }
callback();
}));
Working with Asynchronous Transformations
Through2 makes it easy to handle asynchronous transformations:
const through2 = require('through2');
const asyncTransform = through2.obj(function (chunk, enc, callback) {
setTimeout(() => {
chunk.processed = true;
this.push(chunk);
callback();
}, 1000);
});
asyncTransform.write({ id: 1 }); asyncTransform.pipe(through2.obj((data, enc, callback) => {
console.log(data); // { id: 1, processed: true }
callback();
}));
Complete Application Example
Below is an example of an application that reads from a file, processes each line into uppercase with through2, and writes the result to another file:
const fs = require('fs'); const through2 = require('through2'); const readline = require('readline');
const rl = readline.createInterface({
input: fs.createReadStream('input.txt'),
output: fs.createWriteStream('output.txt')
});
rl.on('line', (line) => {
rl.output.write(through2((chunk, enc, callback) => {
callback(null, line.toUpperCase());
}).pipe(process.stdout));
});
By incorporating through2 in your Node.js projects, you can make efficient transformations and handle various data processing streams seamlessly. This guide covered basic usage, transforming data, working in object mode, asynchronous transformations, and a complete application example to strengthen your understanding of through2.
Hash: 562e404b9771bde81d651da53df2dc4d237306b0490a6ec87c4c954f99491366