TypeORM、NestJS 中的分页

Pagination in TypeORM, NestJS

我的 form 中有 multiple search condition。如果用户没有输入任何内容,那么所有 data 应该是 return。如果他给出 some search input 那么只有那些 matching 记录应该是 return.

以下代码运行良好。唯一的问题是,有时记录也在 30-40 左右,过滤条件也是如此,所以我被要求引入 pagination。无论是否有过滤条件,我们都必须在页面中一次显示 10 条记录。

能否指导我如何在下面的代码中引入 pagination

async findAll(queryCertificateDto: QueryCertificateDto): Promise<Certificate[]> {

    const { certificateNo, requestStatus, protoColNo, noOfSubjects} =queryCertificateDto

    const query = this.certificateRepository.createQueryBuilder('certificate');

    if (certificateNo) {
        query.andWhere('certificate.certificateNo=:certificateNo', { certificateNo });
    }

    if (requestStatus) {
        query.andWhere('certificate.requestStatus=:requestStatus', {
            requestStatus,
        });
    }

    if (protoColNo) {
        query.andWhere('certificate.protoColNo=:protoColNo', { protoColNo });
    }

    if (noOfSubjects) {
        query.andWhere('certificate.noOfSubjects=:noOfSubjects', { noOfSubjects });
    }
    const certificates = await query.getMany();
    return certificates;
}
export const getAllFaqs = () => async (req: Request, res: Response): Promise<void> => {
  const {
    query: { userType ,page ,perPage},
  } = req;
  const faqsPagesRepository = getCustomRepository(FaqsPageRepository);

  let where: FindConditions<Faqs> = {};

  if (userType) {
    where = { ...where, userType };
  }
  const limit =Number(perPage);
  const offset=(Number(page)-1)*limit;
  const result = await faqsPagesRepository.findAndCount({
    where,
    take:limit,
    skip:offset,
  });

  res.status(200).json({ result });
};