当前位置: 首页 > news >正文

网站访问index.html网站建设平台资讯

网站访问index.html,网站建设平台资讯,怎么在建设部网站查注册造价师,wordpress网站手机端菜单栏NestJS 作为 Node.js 领域备受欢迎的框架#xff0c;其与 TypeORM 的结合为开发者提供了强大的 ORM 能力#xff0c;简化了数据库操作。然而#xff0c;在处理分页查询时#xff0c;直接在每个服务方法中重复编写分页逻辑既不高效也容易出错。为此#xff0c;我们可以通过…NestJS 作为 Node.js 领域备受欢迎的框架其与 TypeORM 的结合为开发者提供了强大的 ORM 能力简化了数据库操作。然而在处理分页查询时直接在每个服务方法中重复编写分页逻辑既不高效也容易出错。为此我们可以通过创建一个通用的分页处理函数将分页逻辑从业务逻辑中抽离出来达到代码复用和模块化的目的。 本文将介绍如何对 TypeORM 的查询构造器QueryBuilder进行简单的二次封装以便于我们在 API 层快速实现分页功能同时保持代码的整洁与可维护性。我们将通过一个具体示例来演示这一过程即通过封装一个分页查询方法来查询用户列表并进行相应的数据处理。 我们的目标是设计一个函数setQueryBuilderPagination它接受一个查询构造器实例、分页参数以及一个可选的回调函数作为参数返回一个包含分页信息的对象。这个函数将负责处理查询构造器的分页逻辑如设置每页数量、跳过行数等同时也支持通过回调函数对查询结果进行后处理。 功能实现 export interface IBackendPaginatedQueryParams {currentPage: number;pageSize: number; }interface IBackendPaginatedList {currentPage: number;totalPages: number;total: number;pageSize: number;records: any[]; }/*** 为查询构造器设置分页功能。* async* template T 泛型类型继承自 ObjectLiteral。* param {SelectQueryBuilderT} queryBuilder 查询构造器实例。* param {IBackendPaginatedQueryParams} paginationQueryParams 分页查询参数。* param {((records: T[]) T[])?} [callback] 可选的回调函数用于处理记录数据。* returns {PromiseIBackendPaginatedList} 包含当前页、总页数、总数和记录数据的分页信息对象。*/ export const setQueryBuilderPagination async T extends ObjectLiteral(queryBuilder: SelectQueryBuilderT,paginationQueryParams: IBackendPaginatedQueryParams,callback?: (records: Recordstring, any[]) Recordstring, any[] ): PromiseIBackendPaginatedList {const { pageSize, currentPage } paginationQueryParams;queryBuilder.take(pageSize).skip((currentPage - 1) * pageSize);const [recordsRaw, total] await queryBuilder.getManyAndCount();const records callback ? callback(recordsRaw) : recordsRaw;return {currentPage: Number(currentPage),totalPages: Math.ceil(total / pageSize),total: Number(total),pageSize: Number(pageSize),records,}; };核心逻辑讲解 首先封装的核心在于如何处理分页参数。在setQueryBuilderPagination函数中我们接收两个主要参数查询构造器实例queryBuilder和分页查询参数paginationQueryParams。分页参数包括每页显示的记录数pageSize和当前请求的页码currentPage。函数内部首先读取这两个参数然后利用它们设置查询构造器的分页行为通过.take(pageSize)限制查询结果的数量通过.skip((currentPage - 1) * pageSize)确定从哪条记录开始获取数据。这样就完成了基本的分页设置。 数据获取与计数 紧接着通过调用.getManyAndCount()方法我们一步完成数据的获取及总记录数的统计。这一步骤至关重要因为它既高效地获取了当前页面的数据又提供了计算总页数所需的信息。返回的结果是一个数组其中第一个元素是查询结果第二个元素是总记录数。 后处理回调 为了增强灵活性我们引入了一个可选的回调函数callback它允许在返回最终结果前对原始查询数据进行进一步加工。例如我们可以利用这个回调来格式化数据、添加额外属性或进行数据筛选。在示例中processQueryRecords函数就是一个典型的后处理示例它遍历查询结果为每个用户添加一个roleIds属性该属性包含了用户所有角色的 ID。 返回分页信息对象 最后我们将分页后的数据整理成统一格式返回给调用者。这个格式通常包含当前页码、总页数、总记录数、每页大小以及具体的记录数据。这样的返回结构对于前端分页展示非常友好易于解析和处理。 应用实例用户列表查询 接下来我们将展示如何在实际业务场景中应用此封装函数。假设我们有一个需求要查询用户列表同时需要对查询结果中的角色进行处理提取每个用户的角色 ID 数组。 export class UserService {constructor(private roleService: RoleService,InjectRepository(User) private readonly userRepository: RepositoryUser) {}async findList(filterDto: UserFilterDto,queryParams: IBackendPaginatedQueryParams) {const queryBuilder this.userRepository.createQueryBuilder(user).select([user.id,user.userName,user.email,user.createdTime,user.updatedTime,user.status,user.remark,]).leftJoinAndSelect(user.roles, roles);const processQueryRecords (records: Recordstring, any[]) {return records.map((item: Recordstring, any) {item.roleIds item.roles.map((item) item.id);return item;});};return await setQueryBuilderPaginationUser(queryBuilder,queryParams,processQueryRecords);} }
http://www.hkea.cn/news/14364046/

相关文章:

  • 个人如果做网站赚钱吗验证码平台 wordpress
  • 郑州网站的建设wordpress关联adsense
  • 专业网站设计流程图wordpress设置打赏
  • 建设信用卡在线海淘网站返现网站的三大标签
  • 上市公司网站分析成都网站注册
  • 网站和微信同步建设虚拟主机建多个网站
  • 国外引擎搜索flash网站做seo优化好不好
  • 长春移动网站建设找设计师做网站
  • 苏州网页模板建站陕西网站维护
  • 宁波网站建设高端深圳网站制作开发
  • 目前网站开发的主流语言是什么没有网站可以做淘宝客
  • 淄博网站制作定制升级西安网站建设外包
  • 插头 东莞网站建设北京教育云平台网站建设
  • 云信网站建设测词汇量的专业网站
  • 网站改版建设关键词自然排名优化
  • 免费申请论坛网站广州网站关键词优化推广
  • 中资源 网站域名解析域名解析后网站打不开
  • 网站运营写营销上海品牌网站建设公司
  • 企业能建站吗免费做一建或二建题目的网站
  • 如何做网站收徒弟网站官方百度app下载
  • 阿里云备案网站建设方案书范文58同城免费发布信息
  • 网站建设与网页制作盒子模型问答网站开发
  • 郑州高端网站公司重庆网站免费优化
  • 南京和筑建设有限公司网站网站优化体验报告
  • 网站主机免费申请甘肃省长城建设集团网站
  • 网站开发技术架构wordpress 公式
  • 网页设计作业在线网站首页sem培训学校
  • 黄山网站建设免费咨询快速搭建网站 数据存储
  • 中国未来巨型空间站装修设计软件免费版下载
  • 网站顶部下拉广告代码番禺网站开发技术