Em NestJS, um interceptor é uma classe que implementa a interface NestInterceptor e é usada para interceptar e transformar as requisições ou respostas de um controlador ou método. Interceptores são úteis para diversas tarefas, como manipulação de dados, tratamento de erros, logging, caching, entre outras.
Diferença entre um Interceptor Global e um Não Global
Interceptor Global: Aplicado a todas as rotas da aplicação. Configurado uma vez, ele automaticamente intercepta todas as requisições e respostas de todos os controladores e métodos.
Interceptor Não Global: Aplicado a um controlador específico ou a um método específico, permitindo um controle mais granular sobre onde o interceptor deve ser executado.
Este arquivo define um interceptor que loga o tempo de execução de cada requisição.
A classe LoggingInterceptor implementa a interface NestInterceptor.
O método intercept calcula o tempo de execução e loga essa informação.
2. Aplicar um Interceptor Não Global
Para aplicar o interceptor a um controlador ou método específico, usamos o decorator @UseInterceptors.
Arquivo:cats.controller.ts
Aplicar a um método específico:
import{Controller,Get,UseInterceptors}from'@nestjs/common';import{LoggingInterceptor}from'./logging.interceptor';@Controller('cats')exportclassCatsController{@Get()@UseInterceptors(LoggingInterceptor)findAll():string{return'This action returns all cats';}}
Aplicar a um controlador inteiro:
import{Controller,UseInterceptors,Get}from'@nestjs/common';import{LoggingInterceptor}from'./logging.interceptor';@Controller('cats')@UseInterceptors(LoggingInterceptor)exportclassCatsController{@Get()findAll():string{return'This action returns all cats';}}
Explicação:
No primeiro exemplo, o LoggingInterceptor é aplicado apenas ao método findAll do CatsController.
No segundo exemplo, o LoggingInterceptor é aplicado a todos os métodos do CatsController.
3. Aplicar um Interceptor Global
Para aplicar um interceptor global, registramos o interceptor no módulo principal da aplicação.
Você precisa configurar o middleware em um módulo do seu aplicativo. Normalmente, isso é feito no módulo principal (AppModule).
import{Module,NestModule,MiddlewareConsumer}from'@nestjs/common';import{ResponseTimeMiddleware}from'./response-time.middleware';@Module({// Outros imports e declarações do seu módulo})exportclassAppModuleimplementsNestModule{configure(consumer:MiddlewareConsumer){consumer.apply(ResponseTimeMiddleware).forRoutes('*');// Isso aplica o middleware para todas as rotas}}
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Top comments (2)
O que é um Interceptor em NestJS?
Em NestJS, um interceptor é uma classe que implementa a interface
NestInterceptor
e é usada para interceptar e transformar as requisições ou respostas de um controlador ou método. Interceptores são úteis para diversas tarefas, como manipulação de dados, tratamento de erros, logging, caching, entre outras.Diferença entre um Interceptor Global e um Não Global
Criando e Implementando um Interceptor em NestJS
1. Criar o Interceptor
Arquivo:
logging.interceptor.ts
Explicação:
LoggingInterceptor
implementa a interfaceNestInterceptor
.intercept
calcula o tempo de execução e loga essa informação.2. Aplicar um Interceptor Não Global
Para aplicar o interceptor a um controlador ou método específico, usamos o decorator
@UseInterceptors
.Arquivo:
cats.controller.ts
Explicação:
LoggingInterceptor
é aplicado apenas ao métodofindAll
doCatsController
.LoggingInterceptor
é aplicado a todos os métodos doCatsController
.3. Aplicar um Interceptor Global
Para aplicar um interceptor global, registramos o interceptor no módulo principal da aplicação.
Arquivo:
app.module.ts
Explicação:
LoggingInterceptor
como um interceptor global no módulo principal da aplicação.APP_INTERCEPTOR
para indicar que oLoggingInterceptor
deve ser aplicado globalmente.Resumo das Etapas
logging.interceptor.ts
): Define a lógica do interceptor.cats.controller.ts
): Usa@UseInterceptors
no método específico.cats.controller.ts
): Usa@UseInterceptors
no controlador.app.module.ts
): Registra o interceptor como global no módulo principal da aplicação.Você precisa configurar o middleware em um módulo do seu aplicativo. Normalmente, isso é feito no módulo principal (
AppModule
).