Request-Kontext ohne Prop Drilling: AsyncLocalStorage in Node.js

Jeder nicht-triviale Node.js-Service stößt irgendwann an dieselbe Wand: Du brauchst eine Trace-ID, Tenant-ID oder den authentifizierten Benutzer sechs Ebenen tief im Call Stack, in einem Utility, das mit HTTP-Requests nichts zu tun haben sollte. Der instinktive Fix ist, jeder Funktion zwischen Request-Handler und diesem Utility einen ctx-Parameter zu verpassen. Drei Monate später ist der ctx-Typ auf fünfzehn Felder angewachsen, die Hälfte deiner Funktionssignaturen beginnt damit, und ein neuer Kontextwert bedeutet, ein Dutzend Dateien anzufassen.

AsyncLocalStorage — stabil seit Node 16, seit Node 12 hinter einem Flag verfügbar — löst das sauber. Es ist das Node.js-Äquivalent zu Thread-Local Storage: ein Wert, der an einen asynchronen Ausführungskontext gebunden ist und automatisch durch await, setTimeout, Promise.then und Event-Emitter-Callbacks fließt, ganz ohne explizite Parameterübergabe.