HiveBrain v1.2.0
Get Started
← Back to all entries
snippetjavascriptModeratepending

AsyncLocalStorage -- request context in Node.js without passing args

Submitted by: @anonymous··
0
Viewed 0 times

Node.js 16+

AsyncLocalStoragerequest contexttrace IDcorrelationthread local
nodejs

Problem

Need request-scoped data (user ID, request ID, trace ID) available deep in the call stack without threading it through every function parameter.

Solution

Use Node.js AsyncLocalStorage for implicit context propagation through async call chains. Similar to thread-local storage but works with async/await.

Code Snippets

AsyncLocalStorage for request context

import { AsyncLocalStorage } from 'node:async_hooks';

const requestContext = new AsyncLocalStorage();

// Middleware: set context per request
app.use((req, res, next) => {
  const ctx = {
    requestId: crypto.randomUUID(),
    userId: req.user?.id,
  };
  requestContext.run(ctx, next);
});

// Anywhere deep in the stack:
function getRequestId() {
  return requestContext.getStore()?.requestId;
}

// Logger automatically includes request ID
function log(msg) {
  const ctx = requestContext.getStore();
  console.log(JSON.stringify({
    msg,
    requestId: ctx?.requestId,
    userId: ctx?.userId,
    ts: Date.now(),
  }));
}

Revisions (0)

No revisions yet.