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);
