Skip to main content

Middleware

Middleware run before or after your controller method, depending on the phase where you register them. They receive the native request/response types of the adapter you use.

interface Middleware<
TRequest = any,
TResponse = any,
TNextFunction = any,
TResult = any,
> {
execute(
request: TRequest,
response: TResponse,
next: TNextFunction,
): Promise<TResult> | TResult;
}

Specific adapters use their own request/response types:

type ExpressMiddleware = Middleware<
express.Request,
express.Response,
express.NextFunction,
void
>;

execute

Handles the request and response objects. Use it to modify them or perform actions before passing control to the next middleware or the route handler.

Adapter-specific examples

Each adapter exposes its own request/response types. Here is the same middleware that sets a custom header for each adapter.

export class Express4CustomHeaderMiddleware implements ExpressMiddleware {
public execute(
_request: Request,
response: Response,
next: NextFunction,
): void {
response.setHeader('custom-header', 'value');
next();
}
}

Attaching middleware

Use the ApplyMiddleware decorator at the controller level (applies to all routes) or at the method level (applies to one route).

Global middleware can be registered using the InversifyHttpAdapter.