Nest无法解析AuthService依赖,排查后仍未找到原因求助
NestJS依赖注入报错排查
报错信息
Error: Nest can't resolve dependencies of the AuthService (?). Please make sure that the argument dependency at index [0] is available in the AuthModule context.
Potential solutions:
- Is AuthModule a valid NestJS module?
- If dependency is a provider, is it part of the current AuthModule?
- If dependency is exported from a separate @Module, is that module imported within AuthModule?
@Module({
imports: [ /* the Module containing dependency */ ]
})
相关代码
AppModule
import { Module } from '@nestjs/common'; import { AuthModule } from './auth'; @Module({ imports: [AuthModule] }) export class AppModule {}
AuthModule
import { Module } from '@nestjs/common'; import { UserModule } from '@/user'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; @Module({ controllers: [AuthController], providers: [AuthService], imports: [UserModule] }) export class AuthModule {}
AuthService
import { Inject, Injectable } from '@nestjs/common'; import { UserService } from '@/user'; @Injectable() export class AuthService { constructor(@Inject() private readonly userService: UserService) {} }
UserModule
import { Module } from '@nestjs/common'; import { UserService } from './user.service'; @Module({ providers: [UserService], exports: [UserService] }) export class UserModule {}
UserService
import { Injectable } from '@nestjs/common'; @Injectable() export class UserService {}
问题原因及解决方法
问题出在AuthService的构造器参数上——你给UserService添加了不必要的@Inject()装饰器。
对于类类型的提供者,NestJS会自动根据类的类型完成依赖注入,无需手动添加@Inject()。当你使用空的@Inject()时,Nest会尝试寻找无指定标识的依赖,而UserService的默认标识是它自身的类,两者无法匹配,因此触发报错。
只需去掉构造器参数上的@Inject()即可解决问题:
import { Injectable } from '@nestjs/common'; import { UserService } from '@/user'; @Injectable() export class AuthService { constructor(private readonly userService: UserService) {} }
修改后,Nest就能正确识别UserService作为依赖,从已导入的UserModule中获取对应的实例。
内容的提问来源于stack exchange,提问作者lian
相关产品推荐
相关产品推荐

