NestJS - 将 cron 服务视为请求

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

我有一个重复使用“范围:请求”类型服务的函数。该服务从请求标头获取变量并将其用于进一步的工作。

@Injectable({
  scope: Scope.REQUEST
})
export class Service {

  constructor(
    @Inject(REQUEST) private readonly request: Request
  ) {}

  private getXXX(){
    return this.request.header('XXX').split(' ')[1];
  }

}

我想将此功能附加到 cron 作业中。这会导致 cron 作业服务无法构建,并带有注释“因为它是在非静态提供程序中定义的。”

@Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)
private handleCronJobs(){}
WARN [Scheduler] Cannot register cron job "Service@handleCronJobs" because it is defined in a non static provider.

是否可以从 cron 服务给出调用类型“请求”?

cron nestjs
1个回答
0
投票

如果您将

Request Scoped Service
注入到
CronJobService
中,这将不起作用。由于您的服务是请求范围的,因此 cron 作业服务将无法实例化该服务,因为 cron 作业没有请求对象。

更多信息:NestJS:在 cron 作业执行期间注入的依赖项未定义

您可以做的是删除

scope: Scope.Request
并使用默认行为(作为单例),这应该可以解决问题。如果您计划将请求标头用于您的服务,我建议您将其作为函数参数传递,而不是直接从您可能调用它的控制器

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