我有一个重复使用“范围:请求”类型服务的函数。该服务从请求标头获取变量并将其用于进一步的工作。
@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 服务给出调用类型“请求”?
如果您将
Request Scoped Service
注入到 CronJobService
中,这将不起作用。由于您的服务是请求范围的,因此 cron 作业服务将无法实例化该服务,因为 cron 作业没有请求对象。
更多信息:NestJS:在 cron 作业执行期间注入的依赖项未定义
您可以做的是删除
scope: Scope.Request
并使用默认行为(作为单例),这应该可以解决问题。如果您计划将请求标头用于您的服务,我建议您将其作为函数参数传递,而不是直接从您可能调用它的控制器