簡體   English   中英

NestJS - TypeORM - 無法跟蹤在 TypeOrm 和 Nest.JS 中找不到的實體

[英]NestJS - TypeORM - Unable to track the Entity Not Found in TypeOrm & Nest.JS

No repository for "UserEntity" was found. Looks like 
this entity is not registered in current "default" connection? +114ms
RepositoryNotFoundError: No repository for "UserEntity" was found. Looks like this entity is not registered in current "default" connection?
    at RepositoryNotFoundError.TypeORMError [as constructor] (E:\Projects\...\src\error\TypeORMError.ts:7:9)

這是一種種子方法。 它運行良好並將數據添加到數據庫中,添加數據后,我只是收到錯誤消息。

import { MediaEntity } from '../entities/media.entity';
import { Connection, Equal } from 'typeorm';
import { UserEntity } from '../entities/user.entity';
import { Helper } from '../services/helper';

export default async function UsersSeed(connection: Connection) {
  const repository = connection.getRepository(UserEntity);

  const data: Partial<UserEntity> = {
    firstName: 'tesFName',
    lastName: 'testLNsmr',
    password: 'fafafa',
    email: 'testmail@mail.com',
    createdAt: Helper.dateToUTC(new Date())
  };

  let user = await repository.findOne({ email: data.email });

  console.log("19");
  console.log(user);

  if (!user) {
    const entity = Helper.createEntity(UserEntity, data);
    console.log("23");
    user = await repository.save(entity);
    console.log("25");
  } else {
    console.log("27");
    await repository.update(user.id, {
      firstName: data.firstName,
      lastName: data.lastName
    });

    console.log("33");
  }

  console.log("36");

  const mediaRepository = connection.getRepository(MediaEntity);
  await mediaRepository.update({ user: Equal(null) }, { user: user });

  return user;
}

更多上下文:它正在 app.module.ts 中作為 this 導入。

@Module({
  imports: [
    ServeStaticModule.forRoot({
      rootPath: join(__dirname, 'uploads')
    }),
    TypeOrmModule.forRootAsync({
      useFactory: async (optionsService: OptionsService) =>
        optionsService.typeOrmOptions(),
      imports: [OptionsModule],
      inject: [OptionsService]
    }),
    OptionsModule,
    MediaModule,
    AuthModule,
    PlaceModule,
    RepositoryModule,
    ServicesModule
  ],
  controllers: [],
  providers: []
})

然后是 src/entities/entities.module.ts 為:

const entities = [
  UserEntity,
  MediaEntity,
  PlaceEntity,
  DownloadRestrictionEntity,
  MediaInfoEntity
];

@Module({
  imports: [TypeOrmModule.forFeature(entities)],
  exports: [TypeOrmModule.forFeature(entities)]
})
export class EntitiesModule {
}

然后 src/options/options.service.ts 為

@Injectable()
export class OptionsService {
  constructor(
    private service: ConfigService<IEnvironmentVariables>
  ) {
  }
 public typeOrmOptions(): TypeOrmModuleOptions {
    const environment = process.env.NODE_ENV ? process.env.NODE_ENV : '';
    const directory = this.directory();
    return {
      type: 'postgres',

      host: this.service.get('POSTGRES_HOST'),
      port: this.service.get('POSTGRES_PORT'),
      username: this.service.get('POSTGRES_USER'),
      password: this.service.get('POSTGRES_PASSWORD'),
      database: this.service.get('POSTGRES_DATABASE'),
      synchronize: false,
      migrationsRun: this.service.get('RUN_MIGRATIONS'),
      keepConnectionAlive: this.isTest(),

      entities: [`${directory}/**/*.entity${environment ? '{.ts,.js}' : '{.js, .ts}'}`],

      migrationsTableName: 'migrations',
      migrations: [`${directory}/migrations/*.ts`],

      cli: {
        migrationsDir: 'src/migrations'
      }
    }
  }
}

請創建UserRepository typeorm-repository-pattern方法1:

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
  ) {}
}

方法二:使用typeorm -transactional-cls-hooked中的 BaseRepository

@EntityRepository(UserAdminEntity)
export class UserAdminRepository extends BaseRepository<UserAdminEntity> {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM