【问题标题】:Implementing generic pagination in Nest.JS and TypeORM (DRY, testable)在 Nest.JS 和 TypeORM 中实现通用分页(DRY,可测试)
【发布时间】:2022-01-20 04:23:03
【问题描述】:

我注意到分页代码倾向于从一个实体到另一个实体重复,并且应该将其抽象出来,即限制和跳过文档并不关心我们使用的是哪种类型的基础文档,因此无需为许多不同的实体编写相同的代码。

在 TypeORM 存储库类上概括分页的最佳方法是什么,无论存储库通用类型是什么?

最好这也应该是可测试的。

【问题讨论】:

    标签: pagination nestjs typeorm


    【解决方案1】:

    您可以创建一个 BaseRepository 类,该类扩展 Repository 类的 typeorm 并在该类中添加此方法。现在您需要从BaseRepository 扩展您的自定义存储库,而不是Repository typeorm 类。

    例子:

    BaseRepository:

    class BaseRepository<Entity> extends Repository<Entity> {
      async getPaginatedData(limit: number, offset: number) {
        const [data, total] = await this.findAndCount({
          take: limit,
          skip: offset,
        });
    
        return {
          result: data,
          count: total,
        };
      }
    }
    

    用户存储库:

    @EntityRepository(User)
    export class UserRepository extends BaseRepository<User> {
      // add user related methods...
    }
    

    用户服务:

    @Injectable()
    export class UserService {
      constructor(
        @InjectRepository(UserRepository) private userRepository: UserRepository,
      ) {}
    
    getUsers() {
        // Here you have access to this method because UserRepository is extended from BaseRepository
        return this.userRepository.getPaginatedData(10, 0);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-24
      • 2022-11-11
      • 2019-12-25
      • 2019-01-30
      • 2021-07-16
      • 1970-01-01
      • 2021-01-14
      • 2019-06-27
      相关资源
      最近更新 更多