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.