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

NestJS依赖注入错误:AuthService无法解析UserRepository依赖

问题解决:Nest无法解析AuthService的UserRepository依赖

问题根源

  1. UsersModule未导出UserRepository:当前UsersModule仅导出了UsersService,导致AuthModule导入UsersModule后无法获取UserRepository实例。
  2. AuthService注入方式错误:自定义的UserRepository不是TypeORM原生Repository,不能用@InjectRepository(User)装饰器注入。
  3. AuthModule重复注册UserRepository:在AuthModule的providers中重复声明UserRepository,会创建新实例,而该实例无法获取TypeORM的User Repository依赖(因为TypeOrmModule.forFeature([User])仅在UsersModule中配置)。

修复步骤

1. 修改UsersModule,导出UserRepository

在users.module.ts中,将UserRepository加入exports数组:

import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { UserRepository } from './repository/user.repository';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  controllers: [UsersController],
  providers: [UsersService, UserRepository],
  exports: [UsersService, UserRepository] // 新增UserRepository导出
})
export class UsersModule {}

2. 修正AuthService的注入方式

在auth.service.ts中,移除@InjectRepository(User)装饰器,直接注入自定义的UserRepository:

import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { UserRepository } from '../users/repository/user.repository';
import { CreateUserDto } from '../users/dto/create-user.dto';

@Injectable()
export class AuthService {
  constructor(
    private readonly userRepository: UserRepository, // 移除@InjectRepository装饰器
    private jwtService: JwtService,
  ) {}

  async signUp(createUserDto: CreateUserDto): Promise<any> {
    const { username, password } = createUserDto;

    const existingUser = await this.userRepository.findByUsername(username);

    if (existingUser) {
      return existingUser;
    }

    const hashedPassword = await this.userRepository._hashPassword(password);

    const newUser = await this.userRepository.createUser({ username, password: hashedPassword });
    return newUser;
  }
}

3. 移除AuthModule中重复的UserRepository注册

在auth.module.ts的providers中删除UserRepository,通过导入UsersModule获取实例:

import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { JwtStrategy } from './utils/jwt.strategy';
import { UsersModule } from '../users/users.module';

@Module({
  imports: [
    PassportModule,
    JwtModule.register({
      secret: 'abc123',
      signOptions: { expiresIn: '15m' }
    }),
    UsersModule,
  ],
  providers: [AuthService, JwtStrategy], // 删除UserRepository
  controllers: [AuthController],
})
export class AuthModule {}

验证

修改完成后重启应用,依赖注入错误会被解决,AuthService将能正常获取UserRepository实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:10:55