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

网站建设费用是什么科目企业seo策划方案优化案例

网站建设费用是什么科目,企业seo策划方案优化案例,重庆企业网站推广方案,软件工程软件项目管理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.yingshimen.cn/news/52746/

相关文章:

  • 服装设计网站素材微信公众号 网站开发
  • 教做面包的网站著名网站用什么语言做后台
  • 陕西网站建设排名qq建设网站首页
  • wordpress建站访问不了辽宁沈阳又发现一例吗今天
  • 网站建设有哪些需求自适应的网站模板
  • 白沙的网站建设城乡互动联盟网站建设
  • asp网站模板做第一个php网站
  • 优质手机网站建设哪家好网站建设最新教程视频教程
  • 电子商务网站有哪些和网址wordpress安装后只显示英文站
  • 织梦可以仿所有网站吗wordpress 404 apache
  • 银川网站开发培训网站多少页面合适
  • 西安网站制作顶尖公司notefolio设计官网
  • 网站开发项目费用预算湛江赤坎海田网站建设招聘
  • 银川做企业网站量体定制
  • 陕西安康网站建设怎么做网站播放器
  • 舞钢市住房和城乡建设局网站开发一个saas平台要多少钱
  • 阳西哪里有做网站做网站专业
  • 建设咨询网站做外汇看的国外网站
  • 王者荣誉网站怎么做建设中心小学网站
  • 电子商务网站开发工具水果商城网站制作多少钱
  • 网站快照优化公司网站设计开户
  • 开封网站快速排名优化163企业邮箱收费标准一年多少钱
  • 上海网站建设,分类广告推广员网站
  • 电商类网站建设php网站超市源码
  • ppt成品免费下载的网站wordpress前端登陆
  • 网站的流量建设静态网页是什么意思
  • 个人网站取什么域名好招聘信息如何发布
  • 电子商务做网站设计网站产品页面什么时候做
  • 门户网站整站源码装潢设计软件哪个好
  • 网站建设礻金手指下拉十二常德网站建设网站优化