Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Filters x Middlewares

Só pra ver se eu entendi o conceito: os filters são a forma como o Nest implementa middlewares ou eles são exclusivos para tratamento de erros/exceções? Caso filters não sejam exatamente o mesmo que middlewares, como é possível utilizar middlewares com o Nest?

1 resposta
solução!

Oi Vinícius! Tudo bem?

Filters no Nest.js são utilizados principalmente para tratamento de exceções. Eles permitem capturar e manipular erros que ocorrem durante a execução de uma rota. Por exemplo, se você tiver um filtro de exceção global, ele pode interceptar qualquer erro não tratado e formatá-lo de uma maneira específica antes de enviar a resposta ao cliente. Aqui está um exemplo de como um filtro de exceção pode ser registrado globalmente:

// src/app.module.ts
import { Module } from '@nestjs/common';
import { APP_FILTER } from '@nestjs/core';
import { FiltroDeExcecaoGlobal } from './filtros/filtro-de-excecao-global';

@Module({
  providers: [
    {
      provide: APP_FILTER,
      useClass: FiltroDeExcecaoGlobal,
    },
  ],
})
export class AppModule {}

Middlewares, por outro lado, são funções que podem modificar a requisição e a resposta antes que elas cheguem ao controlador. Eles são muito úteis para tarefas como autenticação, logging, ou modificação de cabeçalhos HTTP. No Nest.js, middlewares são implementados de forma semelhante aos middlewares do Express.js. Aqui está um exemplo de como você pode usar middlewares no Nest.js:

// src/common/middlewares/logger.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    console.log(`Request...`);
    next();
  }
}

// src/app.module.ts
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { LoggerMiddleware } from './common/middlewares/logger.middleware';

@Module({
  // ... seus módulos, controladores, e provedores
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes('*'); // Aplica o middleware para todas as rotas
  }
}

Então, resumindo:

  • Filters são específicos para tratamento de exceções.
  • Middlewares são mais gerais e podem ser usados para várias tarefas que precisam ser executadas antes que a requisição chegue ao controlador.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.