NestJS依赖注入错误:QuizService无法解析QuizEntityRepository依赖
NestJS依赖注入错误排查:无法解析QuizService的依赖
我很少在网上提问,但这次实在无计可施,已搜索所有相关内容仍无法解决问题。我的NestJS应用出现依赖注入错误:
Error: Nest can't resolve dependencies of the QuizService (?). Please make sure that the argument "QuizEntityRepository" at index [0] is available in the AppModule context.
Potential solutions:
- Is AppModule a valid NestJS module?
- If "QuizEntityRepository" is a provider, is it part of the current AppModule?
- If "QuizEntityRepository" is exported from a separate @Module, is that module imported within AppModule?
相关代码实现
QuizService代码
import { Repository } from "typeorm"; import { CreateQuizDto } from "./dto/createQuiz.dto"; import { QuizEntity } from "./quiz.entity"; import { InjectRepository } from "@nestjs/typeorm"; import { Injectable } from "@nestjs/common"; @Injectable() export class QuizService{ constructor( @InjectRepository(QuizEntity) private quizEntityRepository: Repository<QuizEntity>, ) {} async createNewQuiz (quiz: CreateQuizDto) { return await this.quizEntityRepository.save(quiz); } }
QuizModule代码
import { Module } from '@nestjs/common'; import { QuizController } from './quiz.controller'; import { TypeOrmModule } from '@nestjs/typeorm'; import { QuizService } from './quiz.service'; import { QuizEntity } from './quiz.entity'; @Module({ imports: [TypeOrmModule.forFeature([QuizEntity])], controllers: [QuizController], providers: [QuizService], exports: [QuizService], }) export class QuizModule {}
AppModule代码
import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { QuizModule } from './modules/quiz/quiz.module'; import { QuizService } from './modules/quiz/quiz.service'; import { TypeOrmModule } from '@nestjs/typeorm'; import { typeOrmConfig } from './config/typeorm.config'; @Module({ imports: [QuizModule, TypeOrmModule.forRoot(typeOrmConfig)], controllers: [AppController], providers: [AppService, QuizService], }) export class AppModule {}
项目依赖
"dependencies": { "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", "@nestjs/platform-express": "^10.0.0", "@nestjs/typeorm": "^10.0.2", "class-transformer": "^0.5.1", "class-validator": "^0.14.1", "pg": "^8.11.5", "postgres": "^3.4.4", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1", "typeorm": "^0.3.20" }, "devDependencies": { "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", "@types/express": "^4.17.17", "@types/jest": "^29.5.2", "@types/node": "^20.3.1", "@types/supertest": "^6.0.0", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.5.0", "prettier": "^3.0.0", "source-map-support": "^0.5.21", "supertest": "^6.3.3", "ts-jest": "^29.1.0", "ts-loader": "^9.4.3", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", "typescript": "^5.1.3" },
错误原因及解决方案
原因
问题出在AppModule的providers数组中重复声明了QuizService。
QuizService已经在QuizModule中注册为provider,且QuizModule已被AppModule导入。当你在AppModule的providers里再次添加QuizService时,Nest会尝试在AppModule上下文创建新的QuizService实例,但AppModule并未导入TypeOrmModule.forFeature([QuizEntity]),导致无法解析QuizEntityRepository依赖,从而抛出错误。
解决方案
直接删除AppModule的providers数组中的QuizService即可。导入QuizModule后,由于QuizModule已导出QuizService,AppModule可以直接使用该服务,无需重复注册。
修改后的AppModule代码:
import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { QuizModule } from './modules/quiz/quiz.module'; import { TypeOrmModule } from '@nestjs/typeorm'; import { typeOrmConfig } from './config/typeorm.config'; @Module({ imports: [QuizModule, TypeOrmModule.forRoot(typeOrmConfig)], controllers: [AppController], providers: [AppService], // 移除了重复的QuizService }) export class AppModule {}
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

