Подключение Nest.js к базе данных MySQL
Как исправить ошибку "MissingDriverError: Wrong driver: "undefined" given" при подключении к базе данных MySQL через TypeORM в Nest.js? Установил драйвер mysql через yarn и прописал его в AppModule, однако при запуске приложения ошибка все равно возникает. Как можно решить данную проблему?
ormconfig.json - подключение к базе данных
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "0451",
"database": "db_curators",
"entities": ["src/**/*.entity.ts"],
"synchronize": true
}
app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Curator } from './curator/curator.entity';
import { CuratorController } from './curator/curator.controller';
import { CuratorService } from './curator/curator.service';
@Module({
imports: [TypeOrmModule.forRoot(), TypeOrmModule.forFeature([Curator])],
controllers: [CuratorController],
providers: [CuratorService],
})
export class AppModule {}
curator.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Curator } from './curator.entity';
@Injectable()
export class CuratorService {
constructor(
@InjectRepository(Curator)
private curatorRepository: Repository<Curator>,
) {}
async findAll(): Promise<Curator[]> {
return this.curatorRepository.find();
}
}
Ответы (1 шт):
Ошибка "MissingDriverError: Wrong driver: "undefined" given" может возникнуть, если TypeORM не может определить, какой драйвер базы данных использовать. В вашем случае, вы указали настройки подключения в ormconfig.json, однако не передали их в TypeOrmModule.forRoot().
Чтобы исправить эту ошибку, вам нужно передать настройки подключения к базе данных в метод TypeOrmModule.forRoot(). Вы можете сделать это, обновив ваш AppModule следующим образом:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Curator } from './curator/curator.entity';
import { CuratorController } from './curator/curator.controller';
import { CuratorService } from './curator/curator.service';
import { Connection } from 'typeorm'; // импортируем Connection
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: '0451',
database: 'db_curators',
entities: [Curator], // изменяем на массив из объектов сущностей
synchronize: true,
}),
TypeOrmModule.forFeature([Curator])
],
controllers: [CuratorController],
providers: [CuratorService],
})
export class AppModule {
constructor(private connection: Connection) {} // создаем конструктор с параметром Connection
}
Обратите внимание на изменения в объекте настроек TypeOrmModule.forRoot(). В частности, явно указано, что сущность Curator находится в файле curator.entity.ts. Кроме того, в конструкторе AppModule мы получаем параметр Connection, который нужен для устранения ошибки "Cannot read property 'query' of undefined". Если вы все еще столкнулись с этой ошибкой, вам нужно обновить app.module.ts, как показано выше, и затем в каждом сервисе, который использует Repository, добавить в конструктор параметр Connection.
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository, Connection } from 'typeorm'; // импортируем Connection
import { Curator } from './curator.entity';
@Injectable()
export class CuratorService {
constructor(
@InjectRepository(Curator)
private curatorRepository: Repository<Curator>,
private connection: Connection // добавляем параметр Connection в конструктор
) {}
async findAll(): Promise<Curator[]> {
return this.connection.manager.find(Curator); // используем Connection вместо this.curatorRepository
}
}