Lab 03: Streams Advanced
Overview
Step 1: Object Mode Streams
const { Readable, Writable, Transform } = require('node:stream');
// Object mode: pass JS objects instead of Buffers
const objectReadable = Readable.from([
{ id: 1, name: 'Alice', score: 95 },
{ id: 2, name: 'Bob', score: 72 },
{ id: 3, name: 'Charlie', score: 88 }
]); // Readable.from creates object mode automatically for non-strings
// Object mode Transform
class ScoreNormalizer extends Transform {
constructor() { super({ objectMode: true }); }
_transform(record, enc, cb) {
cb(null, {
...record,
grade: record.score >= 90 ? 'A' : record.score >= 80 ? 'B' : 'C',
normalized: (record.score / 100).toFixed(2)
});
}
}
// Object mode Writable
const results = [];
const collector = new Writable({
objectMode: true,
write(obj, enc, cb) { results.push(obj); cb(); }
});
objectReadable
.pipe(new ScoreNormalizer())
.pipe(collector);
collector.on('finish', () => {
console.log('Processed:', JSON.stringify(results, null, 2));
});Step 2: Custom Transform Streams
Step 3: stream.compose
Step 4: WHATWG Web Streams
Step 5: Error Handling in Streams
Step 6: highWaterMark Tuning
Step 7: Stream Performance Patterns
Step 8: Capstone — Object Mode Pipeline
Summary
Feature
API
Use Case
Last updated
