Завершение приложения в Nest
Пусть в самом конце остановки нужно записать, что приложение остановилось. Соединения к этому времени уже закрыты, и метод страницы сюда не подходит: отвечать больше некому.
Последний шаг остановки ловит метод
onApplicationShutdown.
Интерфейс OnApplicationShutdown
задаёт его на сервисе. Метод выполняется,
когда обработка остановки включена
в точке входа, до прослушивания порта,
вызовом enableShutdownHooks.
Покажем на примере постов. Сервис выведет строку в терминал в конце остановки:
import { Injectable, OnApplicationShutdown } from '@nestjs/common';
@Injectable()
export class PostService implements OnApplicationShutdown {
onApplicationShutdown() {
console.log('Application 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 метод,
который выполняется при завершении
приложения. Модуль работников
подключите к корневому.