Nest.js не может разрешать зависимости
Я пытаюсь использовать ConfigService
в моем users.module.ts
но я получаю
Ошибка: Nest не может разрешить зависимости UsersService (UserRepository, HttpService,?). Убедитесь, что аргумент ConfigService с индексом [2] доступен в контексте UsersModule.
Возможные решения:
- Если ConfigService является поставщиком, является ли он частью текущего модуля UsersModule?
- Если ConfigService экспортируется из отдельного модуля @Module, импортируется ли этот модуль в UsersModule?
Я импортировал ConfigModule в свой UsersModule, но все еще не работает:(
app.module.ts
@Module({
imports: [
ConfigModule.forRoot({
expandVariables: true,
}),
TypeOrmModule.forRoot(),
UsersModule,
AuthModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
users.module.ts
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([User])],
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
users.service.ts
export class UsersService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
private readonly httpService: HttpService,
private readonly configService: ConfigService,
) {}
}
2 ответа
Вам все равно придется объявить ConfigService в поставщиках users.module.ts
. См. Пример ниже.
app.module.ts
@Module({
imports: [
ConfigModule.forRoot({
expandVariables: true,
}),
TypeOrmModule.forRoot(),
UsersModule,
AuthModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
users.module.ts
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([UserRepository])],
controllers: [UsersController],
providers: [UsersService, ConfigService],
exports: [UsersService],
})
export class UsersModule {}
Надеюсь это поможет.
Спасибо.
У вас есть кое-что перекрестное (я тоже испытал ту же боль в начале). Лучше всего создать собственный репозиторий для обработки логики базы данных.
Сначала объявите UserRepository
:
@EntityRepository(User)
export class UserRepository extends Repository<User> {
// add your custom db related method here later..
}
Тогда в вашем AppModule
вам нужно объявить свои объекты следующим образом:
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: process.env.DB_HOSTNAME || 'localhost',
port: Number.parseInt(process.env.DB_PORT) || 3306,
username: process.env.DB_USERNAME || 'root',
password: process.env.DB_PASSWORD || 'mysql',
database: process.env.DB_NAME || 'nestjs',
synchronize: process.env.DB_SYNCHRONIZE === 'true' || true,
keepConnectionAlive: true,
entities: [
User
]
})
...
А потом в твоем UsersModule
объявите свой репозиторий:
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([UserRepository])],
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}