Skip to main content

Context

Vegaa's context system is what makes automatic parameter injection possible. It's the invisible layer that connects everything together.

What is Context?​

Context is an object that contains all available values for a request:

  • Route parameters
  • Query parameters
  • Request body
  • Middleware-provided values
  • Headers
  • And more...

How Context Works​

When a request comes in, Vegaa:

  1. Extracts route parameters
  2. Parses query string
  3. Parses request body (if applicable)
  4. Runs middleware in order
  5. Builds a context object with all values
  6. Matches handler parameters to context values
  7. Calls your handler with the matched values

Accessing Context Directly​

You can access the full context object if needed:

route('/example').get((ctx) => {
// ctx contains all available values
return {
params: ctx.params,
query: ctx.query,
body: ctx.body,
headers: ctx.headers
}
})

Context Values​

Common context values:

  • params - Route parameters object
  • query - Query string parameters object
  • body - Request body
  • headers - Request headers
  • Any middleware-provided values

Middleware and Context​

Middleware adds values to context:

vegaa.middleware(() => {
return {
user: { id: 1 },
timestamp: Date.now()
}
})

// These values are now in context
route('/profile').get((user, timestamp) => {
return { user, timestamp }
})

Parameter Matching​

Vegaa matches handler parameters to context values by name:

// Context has: { id: '123', user: {...}, body: {...} }

route('/users/:id').post((id, user, body) => {
// id → context.params.id
// user → context.user (from middleware)
// body → context.body
})

Advanced Context Usage​

Custom Context Values​

Add custom values via middleware:

vegaa.middleware((query) => {
return {
apiVersion: query.v || 'v1',
requestId: generateId()
}
})

route('/api').get((apiVersion, requestId) => {
return { version: apiVersion, id: requestId }
})

Context Transformation​

Transform context values:

vegaa.middleware((params) => {
return {
userId: parseInt(params.id),
isAdmin: params.role === 'admin'
}
})

Best Practices​

  1. Use descriptive parameter names - Makes it clear what values you're using
  2. Group related values - Use objects for complex data
  3. Keep middleware focused - Each middleware should do one thing
  4. Use type hints - TypeScript helps catch context mismatches

Next Steps​