You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS依赖注入报错:导入模块后仍无法解析依赖

NestJS循环依赖注入问题排查与解决

问题场景

取消OwnersService构造函数中PetsService注入的注释后,触发依赖解析错误;未使用forwardRef时则出现循环依赖提示,已在两个模块中配置forwardRef但问题仍存在。

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 apply(`强BL蛋外【格的禁 version的运用解決方案
  }

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

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

报错信息

[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 */ ]
  })

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 {}

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 {}

解决步骤

  1. 注入时同步使用forwardRef
    仅在模块导入时配置forwardRef不完整,需在服务构造函数的依赖注入处也用forwardRef包裹:
    修改OwnersService构造函数:

    import { Injectable, forwardRef, Inject } from '@nestjs/common'
    // ...其他导入
    
    @Injectable()
    export class OwnersService {
      constructor(
        @InjectRepository(Owner)
        private ownersRepository: Repository<Owner>, 
        @Inject(forwardRef(() => PetsService))
        private petsService: PetsService,
      ) {}
      // ...其他方法
    }
    

    若PetsService也注入了OwnersService,需做相同修改:

    // 在PetsService中
    import { Injectable, forwardRef, Inject } from '@nestjs/common'
    import { OwnersService } from '../owners/owners.service'
    
    @Injectable()
    export class PetsService {
      constructor(
        @InjectRepository(Pet)
        private petsRepository: Repository<Pet>,
        @Inject(forwardRef(() => OwnersService))
        private ownersService: OwnersService,
      ) {}
      // ...其他方法
    }
    
  2. 修复代码语法错误
    owners.service.ts的update方法存在语法问题:模板字符串未闭合、apply函数未定义,这会导致编译异常间接影响依赖解析,需先修复该问题。

  3. 清理缓存重启服务
    清除项目编译生成的dist目录,重新编译并启动服务,避免缓存导致的依赖解析异常。

内容的提问来源于stack exchange,提问作者nikulas13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:14:57