Every HTTP interaction with an Express server follows a precise lifecycle: a TCP connection is established, bytes arrive and are parsed by Node's http module into a request object, Express walks its middleware stack to process the request, a response is composed and flushed back, and the connection is either kept alive or closed. Understanding this lifecycle end-to-end is what separates developers who debug Express applications confidently from those who guess. When a request mysteriously returns no body, a CORS header is missing, or a body parser seems not to run, the root cause is almost always a misunderstanding of where in the lifecycle the relevant middleware sits. This lesson traces a request from TCP socket to JSON response, naming every significant step, and explains why each step must occur before the next.
30 minintermediate
Request Lifecycle and Middleware Chain
Analogy🏏Cricket
🏏 Think of it like cricket: In a Test match, there are multiple types of scheduled breaks and interruptions, each with different priority levels and timing rules. The lunch break (setTimeout) is scheduled for a specific time but can be delayed if a wicket falls just before — it fires at the next available opportunity after its scheduled time, not at the exact scheduled time. The drinks break (setImmediate) is taken at the end of the current over, as soon as the ongoing delivery sequence finishes. The umpire's over-rate check (process.nextTick) happens immediately after each delivery, before the next batsman faces — it cannot be deferred. The DRS review resolution (Promise microtask) happens between deliveries, after the umpire check but before any scheduled breaks. Just as the match referee would be furious if an umpire kept conducting over-rate checks after every single ball indefinitely (starving nextTick), the event loop is unable to proceed if process.nextTick callbacks keep registering new nextTick callbacks recursively. The insight is that each timer primitive is not just a delay mechanism — it is a specific position in a formal protocol, and misusing it violates that protocol's invariants.
Lesson 8 of 36
0% complete