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

Udemy《NestJS从0到精通》课程TypeORM仓库配置废弃问题求助

解决NestJS中TypeORM Repository配置废弃问题

TypeORM 0.3+版本废弃了旧的@EntityRepository装饰器及部分Repository实例化方式,下面针对NestJS场景给出适配的新配置方案:

一、默认Repository注入(兼容原有写法)

如果课程中使用的是基础的@InjectRepository()注入方式,只需确保@nestjs/typeorm版本适配TypeORM 0.3+(推荐升级到@nestjs/typeorm@10.x及以上),原有写法依然可用:

模块配置

// user.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UserService } from './user.service';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UserService],
})
export class UserModule {}

服务中注入使用

// user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private readonly userRepository: Repository<User>,
  ) {}

  findAllUsers() {
    return this.userRepository.find();
  }
}

二、自定义Repository(替代废弃的@EntityRepository)

若课程中使用了自定义Repository,原@EntityRepository装饰器已被废弃,改用DataSource实例化自定义Repository:

定义自定义Repository

// user.repository.ts
import { Repository, DataSource } from 'typeorm';
import { User } from './user.entity';

export class UserRepository extends Repository<User> {
  constructor(dataSource: DataSource) {
    super(User, dataSource.createEntityManager());
  }

  // 自定义业务方法
  async findUserByEmail(email: string) {
    return this.findOne({ where: { email } });
  }
}

模块中注册自定义Repository

// user.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { DataSource } from 'typeorm';
import { User } from './user.entity';
import { UserRepository } from './user.repository';
import { UserService } from './user.service';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  providers: [
    {
      provide: UserRepository,
      useFactory: (dataSource: DataSource) => new UserRepository(dataSource),
      inject: [DataSource],
    },
    UserService,
  ],
})
export class UserModule {}

服务中注入自定义Repository

// user.service.ts
import { Injectable, Inject } from '@nestjs/common';
import { UserRepository } from './user.repository';

@Injectable()
export class UserService {
  constructor(
    @Inject(UserRepository)
    private readonly userRepository: UserRepository,
  ) {}

  async getByEmail(email: string) {
    return this.userRepository.findUserByEmail(email);
  }
}

三、全局数据源配置(适配TypeORM 0.3+)

如果全局数据库配置提示废弃,确保TypeOrmModule.forRoot的配置项符合TypeORM 0.3+规范:

// app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql', // 替换为你的数据库类型
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'your_password',
      database: 'test_db',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true, // 生产环境建议关闭
      autoLoadEntities: true, // 0.3+新增,自动加载实体
    }),
  ],
})
export class AppModule {}

内容的提问来源于stack exchange,提问作者Evan Blanco Rojas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:12:03