Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@proscom/nestjs-schedule

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@proscom/nestjs-schedule

Scheduling module for nestjs

  • 0.6.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Nest Logo

nestjs-schedule

Description

This is a Nest module for using decorator schedule a job. It uses node-schedule as the base for the cron-like task execution.

This project is a fork of miaowing/nest-schedule aimed to deliver better functionality.

Installation

$ npm i --save @proscom/nestjs-schedule

or

$ yarn add @proscom/nestjs-schedule

Quick Start

You can declare commands to be executed by creating a service extending the base NestSchedule class.

import { Injectable, LoggerService } from '@nestjs/common';
import { Cron, Interval, Timeout, NestSchedule, defaults } from '@proscom/nestjs-schedule';

defaults.enable = true;
defaults.logger = new NestLogger();
defaults.maxRetry = -1;
defaults.retryInterval = 5000;

export class NestLogger implements LoggerService {
    log(message: string): any {
        console.log(message);
    }

    error(message: string, trace: string): any {
        console.error(message, trace);
    }

    warn(message: string): any {
        console.warn(message);
    }
}

@Injectable()
export class ScheduleService extends NestSchedule {  
  constructor(
    
  ) {
    super();
  }
  
  @Cron('0 0 2 * *', {
    startTime: new Date(), 
    endTime: new Date(new Date().getTime() + 24 * 60 * 60 * 1000),
    tz: 'Asia/Shanghai',
  })
  async syncData() {
    console.log('syncing data ...');
  }
  
  @Cron('0 0 4 * *')
  async clear() {
    console.log('clear data ...');
    await doClear();
  }
  
  @Timeout(5000)
  onceJob() {
    console.log('once job');
  }
  
  @Interval(2000)
  intervalJob() {
    console.log('interval job');
    
    // if you want to cancel the job, you should return true;
    return true;
  }
}

To start the scheduler you should call the init function of the created service. You can do this in a bootstrap function of your nestjs main.ts file:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  
  app
    .select(AppModule)
    .get(ScheduleService)
    .init();
  
  await app.listen(3000);
}

bootstrap()
  .catch((e) => console.error(`Uncatched error`, e));

You can also call init from a different file in order to start scheduler as a separate process. It can be useful in distributed deploys using docker.

Distributed Support

import { Injectable } from '@nestjs/common';
import { Cron, NestDistributedSchedule } from '@proscom/nestjs-schedule';

@Injectable()
export class ScheduleService extends NestDistributedSchedule {  
  constructor() {
    super();
  }
  
  async tryLock(method: string) {
    // If try lock fail, you should throw an error.
    throw new Error('try lock fail');
    
    return () => {
      // Release here.
    }
  }
  
  @Cron('0 0 4 * *')
  async clear() {
    console.log('clear data ...');
  }
}

API

Common options or defaults

fieldtyperequireddescription
enablebooleanfalsedefault is true, when false, the job will not execute
maxRetrynumberfalsethe max retry count, default is -1 not retry
retryIntervalnumberfalsethe retry interval, default is 5000
loggerLoggerServicefalsedefault is false, only available at defaults

Cron(expression: string, options: CronOptions)

fieldtyperequireddescription
expressionstringtruethe cron expression
options.startTimeDatefalsethe job's start time
options.endTimeDatefalsethe job's end time
options.tzstringfalsethe time zone

Interval(time: number, options: BaseOptions)

fieldtyperequireddescription
timenumbertruemillisecond
optionsobjectfalsesame as common options

Timeout(time: number, options: BaseOptions)

fieldtyperequireddescription
timenumbertruemillisecond
optionsobjectfalsesame as common options

License

This package is MIT licensed.

FAQs

Package last updated on 08 Apr 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc