Завершение модуля в Nest
Пусть при остановке приложения сервису нужно успеть закончить свою работу. Метод страницы в этот момент уже никто не вызывает: новых запросов нет, а класс ещё жив.
Завершение модуля вызывает метод
onModuleDestroy у сервиса.
Интерфейс OnModuleDestroy
задаёт этот метод. Сама остановка
до сервиса дойдёт, если в точке входа
включена её обработка. Для этого
до прослушивания порта вызывают
enableShutdownHooks.
Покажем на примере постов. При завершении модуля сервис выведет строку в терминал:
import { Injectable, OnModuleDestroy } from '@nestjs/common';
@Injectable()
export class PostService implements OnModuleDestroy {
onModuleDestroy() {
console.log('Posts module stopped');
}
}
Сервис запишем в модуль постов:
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.create(AppModule);
app.enableShutdownHooks();
await app.listen(process.env.PORT ?? 3000);
}
await bootstrap();
Включите обработку остановки
и сделайте в сервисе
WorkerService метод,
который выполняется при завершении
модуля работников. Модуль
подключите к корневому.