Pesquisa de site

typescript - NestJS, remover controladores ou rotas em produção


Em meus projetos anteriores (antes de usar o NestJS), eu construí uma ferramenta útil chamada "route-collector". Basicamente, ela apenas coleta recursivamente e anexa rotas ao aplicativo Express. Posso alterar seu comportamento usando decorators do TypeScript e a API de reflexão de metadados, por exemplo:

@Controller("/test")
class TestController {
  @Test
  @Get("/")
  private testRoute() {
    // code
  }
}

O decorador @Test faria o coletor de rotas "ignorar" a testRoute se NODE_ENV estivesse definido como production. Eu gostaria de obter esse comportamento no NestJS, mas não consigo elaborar o código.

Alguém já implementou algo assim? Se sim, eu adoraria receber algumas dicas.

Resposta #1

Você pode criar um guard global. (https://docs.nestjs.com/guards)

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

teste de guarda:

export class TestGuard implements CanActivate {
  constructor(private readonly reflector: Reflector) {}

  canActivate(context: ExecutionContext): boolean {
    const testOnly =  this.reflector.get<boolean>('testonly', context.getHandler());
    // return false if node_env is prod and the test decorator is set
 }
}

O decorador seria assim:

export const Test = () => SetMetadata('testonly', true);