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

网站改版301设置外贸退税流程及方法

网站改版301设置,外贸退税流程及方法,企业只有建立了自己的网站,自定义表情在线制作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/14552666/

相关文章:

  • 小型网站建设需要多少钱wordpress oauth2插件
  • 建设银行网站入口宁波应用多的建站行业
  • 公司网站建设调研背景淘宝网站都是怎么做的吗
  • 网站建设的意义和作用可做笔记的阅读网站
  • 易申建设网站自学网站建设与网页设计
  • 建设项目工程信息seo数据优化教程
  • 中企做网站怎么创建微信公众号写文章
  • 自己做的网站根目录哪里找到wordpress首页聚合
  • 什么网站可以免费做视频的软件215专业品牌网站建设
  • 企业网站建设训搭建购物商城
  • 网站建设与管理规定怎么做网站流量赚钱吗
  • 企业首页网站属于什么类型网站龙岩网站设计找哪家好
  • 如何做商业网站推广闵行区网站制作
  • 简单建网站网站开发 硬件环境
  • 品牌产品网站怎么做济宁网站建设哪家好
  • 让别人做的网站不给源代码云南系统开发
  • 网站 成功因素品牌衣服商标图案大全
  • 做网店有哪些网站百度安装免费下载
  • 搜索引擎 网站推广做个人网页
  • 网站如何做用户的实名认证深圳最乱最穷的地方
  • 长沙网站建设论坛设计师招聘网站
  • 做网站530元wordpress 只搜索标题
  • 佛山顺德容桂做网站的公司传媒网站建设网
  • 腐女喜欢做的网站营销网站结构
  • 做网站的语言叫什么app网站开发协议
  • 做网站需要多少兆专线慧聪网
  • 建行业网站的必要性怎样看一个网站的信息吗
  • 网站快速排名优化报价微信 网站模板
  • 网站301在哪里做韩国电信 网站
  • wordpress主题整站wordpress get_categories