Консоль приложения в Nest
Ночной пересчёт или разовая выгрузка должны жить в том же проекте, что и сайт, но слушатель порта здесь лишний: процесс NodeJS должен собрать контейнер, сделать одну операцию и выйти.
Для этого заводят вторую точку
входа рядом с веб main.ts.
NestFactory.createApplicationContext
поднимает IoC контейнер по
корневому модулю, но не открывает
HTTP. Порт не занят, middleware
и цепочки запроса не участвуют,
зато провайдеры и модули
собираются так же, как перед
стартом сервера.
Покажем на примере постов:
import { Module } from '@nestjs/common';
import { PostService } from './post.service.js';
@Module({
providers: [PostService],
})
export class PostsModule {}
import { Module } from '@nestjs/common';
import { PostsModule } from './posts/posts.module.js';
@Module({
imports: [PostsModule],
})
export class AppModule {}
Консольный файл только создаёт контекст и закрывает его, чтобы процесс завершился:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module.js';
async function bootstrap() {
const app = await NestFactory.createApplicationContext(AppModule);
await app.close();
}
await bootstrap();
Добавьте отдельную точку входа
для консоли, которая поднимает
контекст с модулем
WorkersModule и завершает
процесс без прослушивания порта.