У меня есть простое веб-приложение NestJS.Я написал свой собственный простой планировщик задач и внедрил его в глобальный модуль.На самом деле это довольно просто, вы просто передаете ему функцию и дату, и она будет выполнять функцию в заданную дату или периодически, если вы передадите некоторые другие параметры.
scheduler.add(myFunc, myDate);
Мой проект структурирован по функциональным модулям, и у каждого функционального модуля есть свои контроллеры и сервисы.Некоторые задачи добавляются в планировщик в результате запроса http, и в этом случае добавить задачу довольно просто, вы делаете это прямо в методе службы, обрабатывающем связанный запрос.Но некоторые задачи, особенно повторяющиеся, необходимо добавлять при загрузке приложения или модуля.Я планировал создать файл, связанный с каждым функциональным модулем, который содержал бы все повторяющиеся задачи, которые необходимо зарегистрировать в моем планировщике при загрузке приложения или модуля.Мой первый инстинкт был в том, что файл может выглядеть примерно так:
feature.scheduled-tasks.ts
import { Scheduler } from './src/scheduler';
import { Model } from '@nestjs/common';
import { UserModel } from '.src/who/cares/you/get/the/idea';
import { SomeService } from '.src/see/above';
// I need Nest to inject the Scheduler here
const scheduler: Scheduler
// I need Nest to inject some other feature related providers here,
// like Mongoose database models and other services
const userModel: Model<UserModel>;
const someService: SomeService;
const firstTask = () => {
// do stuff using the userModel
}
const secondTask = () => {
// do stuff using someService
}
scheduler.add(firstTask, {units: 5, measure: 'dayOfMonth'});
scheduler.add(secondTask, {units: 17, measure: 'dayOfMonth'});
У меня две проблемы / вопросы при получении этогона работу:
- Как заставить Nest вводить нужные мне провайдеры в этот файл?
- Как сказать Nest запускать содержимое этого файла при работе приложения или функциизагрузка модуля?