Nodejs Nestjs任务调度插件schedule的使用

Nodejs Nestjs任务调度插件schedule的使用
NestJS 提供了一个强大的框架来构建高效、可扩展的应用程序。对于任务调度,你可以使用 nest-schedule 插件。这个插件基于 node-schedule 库,为 NestJS 提供了更方便的接口。

安装

首先,你需要安装 nest-schedulenode-schedule

npm install nest-schedule node-schedule

或者如果你使用的是 Yarn:

yarn add nest-schedule node-schedule

配置

接下来,你可以在你的 NestJS 项目中配置 nest-schedule。首先,创建一个模块(例如 SchedulerModule),并在其中注册 ScheduleModule

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

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

创建定时任务

现在,你可以在你的服务中定义定时任务。例如,我们创建一个 TasksService 并在其中添加一个定时任务:

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

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

  onModuleInit() {
    // 创建一个 cron 表达式来定义任务的执行时间
    const job = {
      name: 'myTask',
      date: new Date(Date.now() + 1000 * 60), // 1分钟后执行
      callback: () => console.log('Task executed!'),
    };

    // 注册任务
    this.schedulerRegistry.addCronJob(job.name, job.callback);
    this.schedulerRegistry.getCronJob(job.name).start();
  }
}

在这个例子中,我们创建了一个名为 myTask 的任务,它将在当前时间后的一分钟后执行一次。你可以修改 date 属性来改变任务的执行时间。

使用 Cron 表达式

你也可以使用 Cron 表达式来定义更复杂的调度规则。例如,每天午夜执行任务:

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

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

  onModuleInit() {
    const job = {
      name: 'midnightTask',
      cronTime: '0 0 0 * * *', // 每天午夜执行
      callback: () => console.log('Midnight task executed!'),
    };

    this.schedulerRegistry.addCronJob(job.name, job.callback);
    this.schedulerRegistry.getCronJob(job.name).start();
  }
}

以上就是如何在 NestJS 中使用 nest-schedule 插件来创建和管理定时任务的基本步骤。你可以根据需要调整任务的执行时间和逻辑。


3 回复

当然!NestJS 的 nest-schedule 插件可以让你轻松地进行任务调度。首先,你需要安装这个插件:

npm install nest-schedule --save

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

import { ScheduleModule } from 'nestjs-schedule';

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

接下来,你可以创建一个定时任务。例如,每分钟执行一次 console.log('Hello, world!')

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

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

  onApplicationBootstrap() {
    const job = this.schedulerRegistry.createJob('myJob', () => {
      console.log('Hello, world!');
    });

    job.everyMinute();
  }
}

这样,每次 NestJS 应用启动时,都会创建一个每分钟执行一次的任务。希望这能帮到你,如果你需要更复杂的功能,nest-schedule 还支持更多的调度选项!


NestJS 是一个用于构建高效、可扩展的服务器端应用程序的框架,而 node-schedule 是一个简单的任务调度库。以下是如何在 NestJS 项目中使用 node-schedule 来创建和管理定时任务。

安装

首先,你需要安装 node-schedule

npm install node-schedule

创建定时任务服务

接下来,创建一个服务来处理你的定时任务逻辑。

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

@Injectable()
export class ScheduleService implements OnModuleInit {
  private job: schedule.Job;

  onModuleInit() {
    this.scheduleTask();
  }

  scheduleTask() {
    // 定义任务:每天凌晨1点执行
    this.job = schedule.scheduleJob('0 1 * * *', () => {
      console.log('Task executed at 1 AM');
      // 在这里添加你需要执行的任务
    });
  }

  cancelTask() {
    if (this.job) {
      this.job.cancel();
      console.log('Task canceled');
    }
  }
}

注册服务

在你的模块文件(通常是 app.module.ts)中注册这个服务:

// app.module.ts
import { Module } from '@nestjs/common';
import { ScheduleService } from './schedule.service';

@Module({
  providers: [ScheduleService],
})
export class AppModule {}

调用服务

现在你可以通过注入 ScheduleService 到其他服务或控制器中来调用定时任务。

// example.controller.ts
import { Controller, Get } from '@nestjs/common';
import { ScheduleService } from './schedule.service';

@Controller()
export class ExampleController {
  constructor(private readonly scheduleService: ScheduleService) {}

  @Get('start-task')
  startTask() {
    this.scheduleService.scheduleTask();
    return 'Task scheduled to run daily at 1 AM';
  }

  @Get('cancel-task')
  cancelTask() {
    this.scheduleService.cancelTask();
    return 'Task canceled';
  }
}

总结

以上步骤展示了如何在 NestJS 应用程序中使用 node-schedule 库来创建和管理定时任务。你可以根据需要调整任务的时间和逻辑。希望这对你有所帮助!

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

npm install @nestjs/schedule node-schedule --save

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

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

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

创建一个调度服务:

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

@Injectable()
export class MyTaskService {
  @OnScheduledTask('*/5 * * * *') // 每5分钟执行一次
  handleScheduledTask() {
    console.log('任务执行了');
  }
}

最后,在你的模块中引入这个服务。这样就完成了基本配置和使用。

回到顶部