如何在打字稿文件中使用nestjs服务函数?

问题描述 投票:0回答:1

我有一个具有特定功能的服务,并且有一个带有执行服务功能的路由的控制器,但现在我需要在 cron 作业中执行该功能,我正在使用 node-cron 库。问题是我是否在另一个打字文件中调用了该服务函数?

这是我的打字稿文件,其中有一个 cron 作业,我尝试执行服务功能。

cronJob.ts

@Injectable() export class SslCronJob { // @Inject(SslService) // private sslService: SslService;

constructor (
    @Inject(SslService)
    private readonly sslService: SslService
) {}

async upload() {
    await this.sslService.upload()
    cron.schedule('* * * * *', async () => {
        console.log('running a task every minute');
        try {
            await this.sslService.upload()
        } catch (err) {
            console.log("error: ", err)
        }
    });

}
}

我尝试从 main.ts 执行这个

async function bootstrap() {
    ...
    ...
    const sslService: SslService = new SslService()
    let sslCron = new SslCronJob(sslService);
    sslCron.upload()
}

但是我在执行时出现此错误,可以访问模型属性。

javascript typescript mongoose cron nestjs
1个回答
0
投票

Cron.schedule
在单独的上下文中处理回调,因此它不知道
this.sslService

尝试使用 NestJs 的

TaskScheduling
模块来执行此操作。这看起来像这样

 @Cron('* * * * * *')
  handleCron() {
    await this.sslService.upload()
  }

如果您想获得服务使用,也可以在

main.ts

const sslService: SslService = app.get(SslService)
let sslCron = new SslCronJob(sslService);
sslCron.upload()

如果您使用任务调度模块,那么您将不需要在 main.ts 中执行此操作

© www.soinside.com 2019 - 2024. All rights reserved.