在后台开发中,我们经常遇到定时的需求,比如每天早上八点推送日志,推送待办,推送天气预报等。接下来简单介绍Nestjs集成定时器的简单使用方法!
在 NestJS 中集成定时器可以使用 @nestjs/schedule
模块,它提供了一种简单而强大的方式来执行定时任务。下面是集成定时器的步骤:
安装 @nestjs/schedule
模块:使用 npm 或者 yarn 安装 @nestjs/schedule
模块。
npm install --save @nestjs/schedule
配置模块:在你的 NestJS 应用的根模块(通常是 app.module.ts
)中导入 ScheduleModule
并添加到 imports
数组中。
import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [ScheduleModule.forRoot()],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
创建定时任务:在任何一个可注入类(比如服务)中创建定时任务。首先,使用 @Injectable()
装饰器将该类标记为可注入。然后,使用 @Cron()
装饰器来指定定时任务的执行时间。可以使用 Cron 表达式或者预定义的字符串(如 '0 * * * *'
表示每小时的整点)。
import { Injectable } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
@Injectable()
export class MyTaskService {
@Cron('0 * * * *') // 每小时的整点执行
handleCron() {
console.log('定时任务每小时执行一次');
}
}
使用定时任务:在需要使用定时任务的地方,比如控制器或者其他服务中,将定时任务的类注入进来,并调用其方法。
import { Controller, Get } from '@nestjs/common';
import { MyTaskService } from './my-task.service';
@Controller('cats')
export class CatsController {
constructor(private readonly myTaskService: MyTaskService) {}
@Get()
findAll(): string {
this.myTaskService.handleCron(); // 执行定时任务方法
return 'This action returns all cats';
}
}
这时我们启动服务,定时器就会正常触发了!
更多跟定时器相关的API请查阅官方文档