Skip to content

Middleware

In H3ravel, Middlewares allows you to filter and process HTTP requests before they reach your controllers or defined callbacks. They are similar to Laravel middleware and work seamlessly with HttpContext.

Creating Middleware

Create middleware files in src/app/Http/Middleware.

Example: LogRequests.ts

ts
import { HttpContext, Middleware } from "@h3ravel/http";

export class AuthMiddleware extends Middleware {
  async handle(
    { request }: HttpContext,
    next: () => Promise<unknown>
  ): Promise<unknown> {
    console.log("auth middleware", request.getEvent("method"), "request");
    return next();
  }
}

Applying Middleware to Routes

Middleware can be attached to a specific route:

ts
import { LogRequests } from "App/Http/Middleware/LogRequests";

Route.get("/dashboard", DashboardController).middleware([LogRequests]);

Global Middleware (coming soon)

Global middleware applies to every route. Define them in the HTTP kernel:

src/app/Http/Kernel.ts

ts
import { Kernel as HttpKernel } from "@h3ravel/http";
import { LogRequests } from "App/Http/Middleware/LogRequests";

export class Kernel extends HttpKernel {
  protected middleware = [LogRequests];
}

Middleware Execution Flow

  • Request hits H3 server
  • Kernel applies global middleware
  • Route-level middleware is applied
  • Controller method executes
  • Middleware can modify or short-circuit the response

Example: Authentication Middleware

ts
import { HttpContext, Middleware } from "@h3ravel/http";

export class AuthMiddleware extends Middleware {
  async handle(
    { request, response }: HttpContext,
    next: () => Promise<unknown>
  ): Promise<unknown> {
    if (!request.headers.get("authorization")) {
      response.setStatusCode(401);
      return { message: "Unauthorized" };
    }

    return await next();
  }
}

Usage:

ts
import { AuthMiddleware } from "App/Http/Middleware/LogRequests";
import { ProfileController } from "App/Http/Controllers/PostController";

Route.get("/profile", [ProfileController, "show"]).middleware([AuthMiddleware]);

Kernel and Pipeline Handling

H3ravel internally uses a Kernel class to handle middleware in a pipeline:

  • Middleware is executed in order
  • Each middleware calls next() to pass control
  • If next() isn’t called, the request stops there

Released under the MIT License.