snippetjavascriptModeratepending
AsyncLocalStorage -- request context in Node.js without passing args
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.