Skip to content

Middleware

Middleware allows developers to insert custom logic into the request processing flow. It follows the "Onion Model".

Creating Middleware

Middleware is an asynchronous function that accepts session and next:

typescript
type Middleware = (session: Session, next: () => Promise<void>) => Promise<void>;

Registration

typescript
export async function apply(ctx: Context) {
  ctx.use(myMiddleware); // Global
  
  ctx.route('/foo')
     .use(authMiddleware) // Route-specific
     .action(...)
}

Use the @Use decorator for route-specific middleware:

typescript
import { Plugin, Get, Use } from '@yumerijs/decorator';

@Plugin
export default class MyPlugin {
  @Get('/admin')
  @Use(authMiddleware)
  async admin(session: Session) {
    session.respond('Secret', 'plain');
  }
}

Global middleware should still be registered in the constructor via ctx.use().

Response Note

Do not set session.body directly. Always use session.respond(content, type) to send a response.