DEV Community

Yan.ts
Yan.ts

Posted on

3 2

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

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (0)

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay