DEV Community

Yan.ts
Yan.ts

Posted on

Criando Crons no Nestjs

Crons são jobs programados para automaticamente rodar em determinado intervalo de tempo ou em uma data especificada.

Para criar as crons utilizei como base a documentação do nestjs

comecei instalando os pacotes recomendados

$ npm install --save @nestjs/schedule
$ npm install --save-dev @types/cron
Enter fullscreen mode Exit fullscreen mode

E no modulo principal do app adicionei o ScheduleModule importado de dentro do @nestjs/schedule

@Module({
  imports: [
    ScheduleModule.forRoot()
  ],
})
Enter fullscreen mode Exit fullscreen mode

o forRoot serve para inicializar o scheduler e registrar os jobs da cron, setar timeouts e intervalos.

para definir a função que vai ser rodada com a cron basta usar o decorator @Cron e passar como parâmetro quanto tempo é o intervalo da cron, o intervalo pode ser definido utilizando alguns padrões mas nessa caso usei o de asteriscos

* * * * * *
| | | | | |
| | | | | dia da semana
| | | | mês
| | | dia do mes
| | horas
| minutos
segundos
Enter fullscreen mode Exit fullscreen mode

onde por exemplo:
45 * * * * * no segundo 45 de cada minuto
0 30 11 * * 1-5 significa de segunda a sexta as 11:30

porem o modulo do nestjs também prove um enum onde tem as patterns de crons mais comuns CronExpression.EVERY_30_SECONDS ou também pode passar um objeto de Date para o decorator mas fazendo assim a cron vai ser executada somente uma vez na data especificada. Como um teste inicial declarei a seguinte Cron

  @Cron(CronExpression.EVERY_10_SECONDS, { name: 'Console.log cron' })
  register() {
    console.log(`cron executada em ${new Date()}`);
  }
Enter fullscreen mode Exit fullscreen mode

Ela foi executada assim que o serviço iniciou e então de 10 em 10 segundos a partir dai.

Image description

Com isso podemos fazer qualquer tipo de job recorrente por exemplo enviar e-mails para clientes de forma semanal ou enviar notificações ou gerar um relatório por exemplo ou até mesmo para automatizar o readme do github
onde definimos uma cron que roda através do github actions para buscar meu blogposts mais recentes e colocar no meu readme

Top comments (0)