Error: Nest can't resolve dependencies despite adding the module to imports

244 Views Asked by At

This is my owners.service.ts

import { Injectable } from '@nestjs/common'
import { CreateOwnerInput } from './dto/create-owner.input'
import { UpdateOwnerInput } from './dto/update-owner.input'
import { InjectRepository } from '@nestjs/typeorm'
import { Owner } from './entities/owner.entity'
import { Repository } from 'typeorm'
import { Pet } from '../pets/pet.entity'
import { PetsService } from '../pets/pets.service'

@Injectable()
export class OwnersService {
  constructor(
    @InjectRepository(Owner)
    private ownersRepository: Repository<Owner>, // private petsService: PetsService,
  ) {}

  create(createOwnerInput: CreateOwnerInput) {
    const newOwner = this.ownersRepository.create(
      createOwnerInput,
    )

    return this.ownersRepository.save(newOwner)
  }

  findAll() {
    return this.ownersRepository.find()
  }

  findOne(id: number) {
    return this.ownersRepository.findOneOrFail({
      where: { id },
    })
  }

  update(id: number, updateOwnerInput: UpdateOwnerInput) {
    return `This action updates a #${id} owner`
  }

  remove(id: number) {
    return `This action removes a #${id} owner`
  }

  // getPets(id: number): Promise<Pet[]> {
  //   return this.petsService.findAllForOwner(id)
  // }
}

As soon as I comment back in the injection for the petsService in the constructor I am getting this error

Nest] 17328  - 07/19/2023, 11:35:12 PM   ERROR [ExceptionHandler] Nest can't resolve dependencies of the OwnersService (OwnerRepository, ?). Please make sure that the argument dependency at index [1] is available in the OwnersModule context.

Potential solutions:
- Is OwnersModule a valid NestJS module?
- If dependency is a provider, is it part of the current OwnersModule?
- If dependency is exported from a separate @Module, is that module imported within OwnersModule?
  @Module({
    imports: [ /* the Module containing dependency */ ]
  })

However I have already included the PetsModule which exports the PetsService as a import in my OwnersModule

This is my owners.module.ts

import { forwardRef, Module } from '@nestjs/common'
import { OwnersService } from './owners.service'
import { OwnersResolver } from './owners.resolver'
import { TypeOrmModule } from '@nestjs/typeorm'
import { Owner } from './entities/owner.entity'
import { PetsModule } from '../pets/pets.module'

@Module({
  imports: [
    TypeOrmModule.forFeature([Owner]),
    forwardRef(() => PetsModule),
  ],
  providers: [OwnersResolver, OwnersService],
  exports: [OwnersService],
})
export class OwnersModule {}

and this is my pets.module.ts

import { forwardRef, Module } from '@nestjs/common'
import { PetsService } from './pets.service'
import { PetsResolver } from './pets.resolver'
import { TypeOrmModule } from '@nestjs/typeorm'
import { Pet } from './pet.entity'
import { OwnersModule } from '../owners/owners.module'

@Module({
  imports: [
    TypeOrmModule.forFeature([Pet]),
    forwardRef(() => OwnersModule),
  ],
  providers: [PetsResolver, PetsService],
  exports: [PetsService],
})
export class PetsModule {}

I started getting the error after adding the forwardRef but previously I was getting another error about circual dependencies

1

There are 1 best solutions below

0
On

If PetsService is circular with OwnersService you need to add @Inject(forwardRef(() => OtherService)) in both services, just like you did for the modules