| name | horse-writing-middleware |
| description | Guide to writing custom middlewares for the Horse framework, following the callback flow with the Next parameter. |
Writing Custom Horse Middlewares
Middleware Signature
A custom middleware is a procedure that receives THorseRequest, THorseResponse, and a callback procedure Next.
procedure MyCustomMiddleware(Req: THorseRequest; Res: THorseResponse; Next: TProc);
begin
// 1. Logic BEFORE the request reaches the endpoint handler
Req.Headers.AddOrSetValue('X-Processed-By', 'MyMiddleware');
// 2. Call Next to delegate execution to the subsequent middleware or route handler
Next;
// 3. Logic AFTER the route handler completes its execution
Res.Headers.AddOrSetValue('X-Execution-Finished', 'True');
end;
Terminating Execution Early
If a validation fails (e.g., authentication is missing), do NOT call Next. Set the status and send the response immediately. This halts the pipeline execution.
procedure AuthMiddleware(Req: THorseRequest; Res: THorseResponse; Next: TProc);
var
LToken: string;
begin
LToken := Req.Headers.Items['Authorization'];
if LToken.IsEmpty then
begin
// Halt execution by sending response and omitting the Next call
Res.Send('Unauthorized').Status(THTTPStatus.Unauthorized);
Exit;
end;
// Token is valid, proceed with pipeline
Next;
end;