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 ExpressCustomHeaderMiddleware 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.