Skip to content

El middleware se ejecuta antes del manejador de ruta y puede modificar la solicitud, la respuesta o cortocircuitar el pipeline.

Middleware Basado en Clases

Crea una clase que implemente ElysiaNestMiddleware:

typescript
import { Injectable, ElysiaNestMiddleware } from "nestelia";

@Injectable()
class LoggerMiddleware implements ElysiaNestMiddleware {
  async use(context: any, next: () => Promise<any>) {
    const start = Date.now();
    console.log(`→ ${context.request.method} ${context.request.url}`);

    await next();

    console.log(`← ${Date.now() - start}ms`);
  }
}

Regístralo en los arreglos providers y middlewares del módulo:

typescript
@Module({
  controllers: [AppController],
  providers: [LoggerMiddleware],
  middlewares: [LoggerMiddleware],
})
class AppModule {}

El middleware basado en clases se resuelve desde el contenedor de DI, por lo que puede inyectar otros servicios:

typescript
@Injectable()
class AuthMiddleware implements ElysiaNestMiddleware {
  constructor(@Inject(AuthService) private auth: AuthService) {}

  async use(context: any, next: () => Promise<any>) {
    const token = context.request.headers.get("authorization");
    if (!this.auth.verify(token)) {
      context.set.status = 401;
      return { error: "Unauthorized" };
    }
    await next();
  }
}

Middleware Funcional

Para casos más simples, usa funciones de plugin de Elysia directamente:

typescript
import cors from "@elysiajs/cors";
import jwt from "@elysiajs/jwt";

@Module({
  middlewares: [
    (app) => app.use(cors()),
    (app) => app.use(jwt({ secret: "my-secret" })),
  ],
})
class AppModule {}

Orden de Ejecución

El middleware se ejecuta en el orden en que aparece en el arreglo middlewares, antes de que se ejecute cualquier manejador de ruta. El middleware basado en clases de los módulos importados se ejecuta antes que el middleware del módulo actual.

Publicado bajo la licencia MIT.