Nodejs Nestjs任务调度插件nestjs-scheduler的使用

Nodejs Nestjs任务调度插件nestjs-scheduler的使用
nestjs-scheduler 是一个基于 Node.js 和 NestJS 的任务调度插件,它允许你在 NestJS 应用中轻松地添加定时任务。以下是如何在 NestJS 项目中使用 nestjs-scheduler 的步骤。

安装

首先,你需要安装 @nestjs/schedule 包:

npm install @nestjs/schedule

配置

然后,在你的应用模块(通常是 AppModule)中导入 ScheduleModule

import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';

@Module({
  imports: [
    ScheduleModule.forRoot(),
  ],
})
export class AppModule {}

创建定时任务

创建一个新的服务来定义定时任务。例如,创建一个 TasksService

nest generate service tasks

tasks.service.ts 中,你可以使用 @Cron 装饰器来定义定时任务:

import { Injectable } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';

@Injectable()
export class TasksService {

  @Cron('*/5 * * * *') // 每5分钟执行一次
  handleCron() {
    console.log('执行定时任务');
  }

  // 或者使用更复杂的 cron 表达式
  @Cron('0 15 10 ? * MON-FRI')
  handleCron2() {
    console.log('每周一到周五上午10:15执行');
  }
}

注册服务

确保在 AppModule 中注册 TasksService

import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
import { TasksService } from './tasks/tasks.service';

@Module({
  imports: [ScheduleModule.forRoot()],
  providers: [TasksService],
})
export class AppModule {}

运行应用

启动你的 NestJS 应用,你应该会看到定时任务按照设定的时间表执行。

npm run start

更多配置

你还可以通过传递选项来自定义 Cron 任务的行为,例如:

@Cron('0 0 * * *', {
  name: 'dailyJob',
  zone: 'Asia/Shanghai',
  utc: false,
})

这里的 zone 参数用于指定时区,utc 参数用于指示是否将时间转换为 UTC。

以上就是在 NestJS 中使用 nestjs-scheduler 的基本步骤。希望这对你有所帮助!


3 回复

当然!nestjs-scheduler 是一个非常方便的插件,用于在 NestJS 应用中添加定时任务。首先,你需要安装它:

npm install @nestjs/schedule --save

然后,在你的模块中导入 ScheduleModule

import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';

@Module({
  imports: [ScheduleModule.forRoot()],
})
export class AppModule {}

接下来,你可以创建一个定时任务。例如,每分钟执行一次某个函数:

import { Component, OnModuleInit } from '@nestjs/common';
import { SchedulerRegistry } from '@nestjs/schedule';

@Component()
export class AppService implements OnModuleInit {
  constructor(private schedulerRegistry: SchedulerRegistry) {}

  onModuleInit() {
    this.schedulerRegistry.addTimeout(
      'myTimeout',
      setTimeout(() => console.log('Hello, it’s me.'), 60000),
    );
  }
}

这样,每当应用启动时,“Hello, it’s me.” 就会在 60 秒后被打印出来。你可以根据需要调整定时器。

希望这能帮到你,如果还有其他问题,尽管问吧!


nestjs-scheduler 是一个用于 NestJS 应用程序的任务调度插件,基于 node-schedule。以下是如何使用 nestjs-scheduler 的基本步骤和示例。

安装

首先,你需要安装 nestjs-schedulernode-schedule

npm install @nestjs/schedule
npm install node-schedule

配置

在你的 NestJS 项目中配置 nestjs-scheduler,你可以在主模块(通常是 AppModule)中进行如下配置:

import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';

@Module({
  imports: [
    ScheduleModule.forRoot(),
  ],
})
export class AppModule {}

创建定时任务

创建一个服务来定义你的任务调度逻辑。例如,创建一个名为 cron.service.ts 的文件:

import { Injectable, OnModuleInit } from '@nestjs/common';
import { scheduleJob } from 'node-schedule';

@Injectable()
export class CronService implements OnModuleInit {
  private job;

  onModuleInit() {
    this.scheduleCronStyleTask();
  }

  scheduleCronStyleTask() {
    // 每分钟执行一次的任务
    this.job = scheduleJob('*/1 * * * *', () => {
      console.log(`The time is now ${new Date()}`);
    });
  }

  cancelJob() {
    if (this.job) {
      this.job.cancel();
    }
  }
}

在这个例子中,我们设置了一个定时任务,它每分钟执行一次,打印当前时间。

使用服务

现在,你可以通过注入这个服务并在你的控制器或其他服务中调用其方法来使用这个定时任务。

例如,在一个控制器中使用:

import { Controller, Get } from '@nestjs/common';
import { CronService } from './cron.service';

@Controller()
export class AppController {
  constructor(private readonly cronService: CronService) {}

  @Get('start')
  startCron() {
    this.cronService.scheduleCronStyleTask();
  }

  @Get('stop')
  stopCron() {
    this.cronService.cancelJob();
  }
}

这样,当你访问 /start 路由时,会开始执行定时任务;访问 /stop 路由时,则会停止任务。

以上就是使用 nestjs-scheduler 的基础流程,你可以根据自己的需求调整任务的执行频率和其他参数。

nestjs-scheduler 是一个用于 NestJS 的任务调度插件,基于 node-schedule。首先安装该库:

npm install @nestjs/schedule --save

然后在你的模块中导入 ScheduleModule

import { ScheduleModule } from '@nestjs/schedule';

@Module({
  imports: [ScheduleModule.forRoot()],
})
export class AppModule {}

创建一个调度服务:

import { Injectable, OnModuleInit } from '@nestjs/common';
import { SchedulerRegistry } from '@nestjs/schedule';

@Injectable()
export class MyJobService implements OnModuleInit {
  constructor(private schedulerRegistry: SchedulerRegistry) {}

  onModuleInit() {
    const job = new CronJob('*/5 * * * *', () => {
      console.log('Running Cron Job');
    });
    this.schedulerRegistry.addCronJob('myJob', job);
    job.start();
  }
}

这样,你就设置了一个每5分钟执行一次的任务。

回到顶部