Проверка соединения в Nest
Пусть модуль базы подключён, но по адресу страницы не видно, удалось ли открыть соединение. Удобно спросить об этом у самого драйвера при запросе.
TypeORM создаёт объект DataSource
и регистрирует его в контейнере Nest.
Его внедряют в контроллер так же,
как сервис. Свойство isInitialized
показывает, что пул соединений
готов к запросам.
TypeOrmModule с методом forRoot
должен стоять в том же корневом
модуле, где объявлен контроллер,
иначе DataSource не попадёт
в конструктор.
Покажем на примере постов:
import { Controller, Get } from '@nestjs/common';
import { DataSource } from 'typeorm';
@Controller()
export class PostController {
constructor(private dataSource: DataSource) {}
@Get('db-check')
checkDb(): string {
if (this.dataSource.isInitialized) {
return 'Database is connected';
}
return 'Database is not connected';
}
}
Зарегистрируем контроллер и оставим подключение базы с выключенной синхронизацией схемы:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { PostController } from './post.controller.js';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'site',
autoLoadEntities: true,
synchronize: false,
}),
],
controllers: [PostController],
})
export class AppModule {}
Сделайте в контроллере
WorkerController страницу,
которая сообщает, открыто ли
соединение с базой. Подключите
модуль базы в корне проекта
работников.