SynfraCore
Synfracore
Start Learning
Navigation

Academies

Platform

RoadmapsLabsCertificationsInterviewPYQsAI AssistantCareer
Start Learning Free Learning Roadmaps

Node.js — Notes

Key takeaways, tips, and important points to remember

📄
Last updated Sep 2026
Expert Content

Node.js — Revision Notes

Condensed from Overview, Fundamentals, Intermediate, Advanced, and Troubleshooting — use this for a fast pre-interview or pre-project review, not as a first-time learning source.

What Node Is

•A JavaScript runtime built on V8 (Chrome's engine), not a framework — lets JS run outside the browser
•Same event-loop model as the browser (single call stack, non-blocking hand-off); different underlying APIs (fs, http, net via libuv instead of DOM/Web APIs)
•Still fundamentally single-threaded for JS execution — I/O concurrency comes from never blocking that one thread on I/O, not from parallel JS

Module System

•CommonJS (require/module.exports) — Node's original, synchronous, still the default
•ES Modules (import/export) — opt-in via "type": "module" or .mjs
•require() caches — requiring the same file twice returns the same object reference, not a fresh execution
•Mixing the two systems incorrectly is a common, real source of "Cannot find module" / loader errors

Core Built-in Modules

•fs — file I/O; *Sync methods block the whole thread, avoid inside request handlers
•path — cross-platform path building; use with __dirname for file-relative paths
•http — the module every framework (Express) is built on top of; routing/body-parsing are manual here
•process — env vars (process.env), args (process.argv), exit codes, global process events

Streams (the most Node-distinctive topic)

•Process data in chunks, not all at once — constant memory use regardless of file size
•readStream.pipe(writeStream) handles backpressure automatically
•Every core I/O API (fs, http, net) is stream-based natively

EventEmitter

•Base class behind streams, http, and most of Node's own event-driven APIs
•.on() (repeatable), .once() (fires once), .emit(), multiple independent listeners per event

The Node Event Loop (more granular than the browser model)

•Phases, in order: timers → pending callbacks → poll → check → close callbacks
•Microtasks (Promise callbacks, process.nextTick) drain between every phase, not just at the end
•process.nextTick has the highest priority of anything in the loop
•setImmediate runs before setTimeout(fn, 0) when both are scheduled inside an I/O callback (poll before check) — ordering is less strictly defined from the top-level module

Concurrency for CPU-bound Work

•async/await only helps with I/O waiting — it does nothing for genuine CPU-bound computation
•worker_threads — real parallel JS within one process, for CPU-bound work that must stay in-process
•cluster — multiple Node processes, each with its own event loop, for scaling request throughput across cores; does NOT make any individual process immune to being blocked

Error Handling

•Error-first callbacks: (err, data) => {} — nothing checks err automatically, must be explicit every time
•async/await: wrap in try/catch
•The classic bug: calling an async function without await/.catch() — unhandled rejection, can crash the process
•Global safety nets: process.on("unhandledRejection", ...), process.on("uncaughtException", ...) — log, don't rely on as primary handling

npm / Versioning

•^4.19.2 = minor+patch updates OK, never major; ~4.17.21 = patch only; no prefix = pinned exactly
•package-lock.json pins the exact resolved tree — commit it, use npm ci in CI/production
•dependencies vs devDependencies — production installs can skip dev-only tooling

Memory Leaks

•Classic real cause: an unbounded in-memory cache/array nothing ever evicts from
•Healthy memory graph: sawtooth (rise, GC, drop, repeat). Leak signature: sawtooth with a rising floor over hours/days
•Fix: bound caches with LRU eviction and/or a TTL
•Diagnose with node --inspect heap snapshots, compared across time under load — watch object count, not just size

Production Health Signals

•perf_hooks.monitorEventLoopDelay() — rising event-loop lag is the earliest, most Node-specific health signal
•A process can look "up" (accepting connections) while effectively unresponsive if the event loop is blocked

Versioning Note

The following are genuinely volatile and should be re-verified against current sources, not treated as fixed facts from this page: (needs verification — recheck against current source)

•The current Node.js LTS version number and its exact release/EOL dates
•Whether node --env-file has fully superseded the dotenv package for a given project's minimum supported Node version
•npm's exact current default behavior around npm install vs npm ci in edge cases, and current npm audit output format
•Current JSNAD/JSNSD certification pricing and exam format (see the Certification tab)
Share:
Join our Community
Daily tips, job alerts, interview help — join engineers learning together
→
Up Next
📝
Node.js — PYQ
Previous Year Questions with detailed solutions
Also Worth Exploring
← Back to all Node.js modules
← CheatsheetsPYQ →