我正在使用nest.js框架来开发基于节点的应用程序。我正在尝试使用https://www.npmjs.com/package/nest-schedule中提到的嵌套计划来编写计划程序。
以某种方式与@Cron或@Schedule一起使用时,代码无法正常工作。休息其他装饰工作正常。使用与上述链接相同的代码库。谁能帮助我进行设置以及在nodejs中使用的确切cron模式
答案 0 :(得分:2)
对于当前版本的 Nest,您可以使用 nestjs/schedule。看看我是如何使用 nestjs/schedule 实现的。
第一个:安装nestjs cli
npm i -g @nestjs/cli
第二:创建一个新项目
nest new schedule-sample
第三:安装nestjs调度
npm install --save @nestjs/schedule
4th:生成一个新的服务来放置你的服务。
nest generate service cron
安装包后,将其添加到 app.module 中,如下所示:
import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
从'@nestjs/common'导入{记录器};
@Module({
imports: [
ScheduleModule.forRoot()
],
})
export class AppModule {}
5th:您可以按如下所示运行它(完整说明在此处https://docs.nestjs.com/techniques/task-scheduling):
@Cron('*/5 * * * * *')
runEvery10Seconds() {
console.log('Run it every 5 seconds');
}
这是完整的示例 (cron.service.ts)。
从'@nestjs/common'导入{记录器}; 从'@nestjs/common'导入{可注射}; 从 '@nestjs/schedule' 导入 { Cron, Interval };
@Injectable()
export class CronService {
private readonly logger = new Logger(CronService.name);
@Cron('*/5 * * * * *')
runEvery10Seconds() {
this.logger.debug('Run it every 5 seconds');
}
@Cron('10 * * * * *')
handleCron() {
this.logger.debug('Called when the current second is 10');
}
@Interval(10000)
handleInterval() {
this.logger.debug('Called every 10 seconds');
}
}
最后的想法:
调度作业的最复杂方法是使用动态 cron 作业。为此,您可以使用 SchedulerRegistry API 从代码中的任何位置按名称获取对 CronJob 实例的引用。首先,使用标准构造函数注入注入 SchedulerRegistry:
constructor(private schedulerRegistry: SchedulerRegistry) {}
提示 从 @nestjs/schedule 包中导入 SchedulerRegistry。 然后在类中使用它,如下所示。假设使用以下声明创建了一个 cron 作业:
@Cron('* * 8 * * *', {
name: 'notifications',
})
triggerNotifications() {}
使用以下方式访问此作业:
const job = this.schedulerRegistry.getCronJob('notifications');
job.stop();
console.log(job.lastDate());
我已经在以下版本 (package.json) 中对其进行了测试
"@nestjs/common": "^7.6.15",
"@nestjs/core": "^7.6.15",
"@nestjs/schedule": "^0.4.3",
答案 1 :(得分:0)
@Cron()
和@Schedule()
装饰器直到v0.3.1(github issue)才真正起作用。
您可以尝试使用latest version吗?
package.json
{
...
"dependencies": {
"nest-schedule": "^0.3.1"
...
}
...
}
scheduler.service.ts
import { Injectable } from '@nestjs/common';
import { Cron, NestSchedule } from 'nest-schedule';
@Injectable()
export class SchedulerService extends NestSchedule {
// ...
@Cron('* * * * * *') // Run every second
scheduledJob() {
console.info('[Scheduler]: scheduled jobs has been started');
// ...
}
// ...
}
为我工作。
答案 2 :(得分:0)
我遇到了同样的问题...做一些研究,发现我需要使用最新版本的@ nestjs / common和@ nestjs / core,如果还使用@ nestjs / platform-express
答案 3 :(得分:0)
您是否已将您的工作服务添加到模块中?
https://github.com/nestjs/nest/tree/master/sample/27-scheduling/src/tasks