Nestjs cronjob无法读取注入服务



我设置了一个cronjob,它应该从另一个模块激发和调用服务。控制台记录的项目显示在控制台中,当我从端点手动运行该方法时。该服务返回一个成功的结果。但有一次我放回了cronjob装饰器。该服务未定义

抛出异常TypeError: Cannot read property 'getAll' of undefined

我使用过其他nodejs cronjob包,但错误仍然存在。有变通办法吗?

@Cron(CronExpression.EVERY_10_SECONDS)
async test() {
try {
console.log('working 22');
const ee = await this.Service.getAll();
console.log(ee);
for (const key in ee) {
console.log(ee[key].termsID);
}
const terms = await this.termsModel.find({
isDeleted: false
});
console.log(terms);
console.log('working 22 end!');
} catch (error) {
console.log(error)
}
}

appmodule


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

您需要确保从Cron-服务的提供者中的全局模块声明要使用的服务。考虑这个简单的例子:

// Sample Cron-Service
// -------------
@Injectable()
export class CronService {
private readonly logger = new Logger(CronService.name);
constructor(private globalService: GlobalService) {
}
@Cron(CronExpression.EVERY_5_SECONDS)
test() {
this.logger.debug(`Called every 5 seconds with random value: ${this.globalService.getSomeData()}`);
}
}
// Cron-Module
// -------------
@Module({
providers: [CronService, GlobalService] // <--- this is important, you need to add GlobalService as a provider here
})
export class CronModule {
}
// Global-Service
// -------------
@Injectable()
export class GlobalService {
getSomeData() {
return Math.random() * 500;
}
}
// Global-Module
// -------------
@Global()
@Module({
providers: [GlobalService]
})
export class GlobalModule {
}

此外,您需要确保全局模块与@nestjs/schedule包中的ScheduleModule一起导入到根/核心模块中,例如:

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

最新更新