多字段排序,为服务器端开发人员提供节省时间的功能(api分页)

多字段排序,为服务器端开发人员提供节省时间的功能(api分页)

应用场景:
您可以使用多种方式指定排序顺序,例如:

升序/降序: https://your-url?sort[first_name]=desc&sort[last_name]=ascascending/descending: https://your-url?sort[first_name]=ascending&sort[last_name]=descending1/-1: https://your-url?sort[first_name]=1&sort[last_name]=-1sortby 和 sortorder 参数: https://your-url?sortorder=desc&sortby=last_name

此函数还能处理 sortby 和 sortorder 参数。

TypeScript 代码:

type SortOrder = "asc" | "desc" | "ascending" | "descending" | 1 | -1;export interface IPaginationFields {    page?: number;    limit?: number;    sortby?: string | string[];    sortorder?: SortOrder | SortOrder[];    sort?: Record;}export interface IFormattedPagination {    skip: number;    page: number;    limit: number;    sort: Record;}export const formatPagination = (    pagination: IPaginationFields): IFormattedPagination => {    const { limit = 10, page = 1, sortby, sortorder, sort = {} } = pagination;    const formattedSort: Record = {};    const normalizeOrder = (value: string | number): 1 | -1 => {        const numValue = Number(value);        if (!isNaN(numValue) && (numValue === 1 || numValue === -1)) {            return numValue;        } else {            return value === "asc" || value === "ascending" ? 1 : -1;        }    };    if (sortby) {        const sortbyArray = Array.isArray(sortby) ? sortby : [sortby];        const sortorderArray = Array.isArray(sortorder) ? sortorder : [sortorder];        sortbyArray.forEach((field, index) => {            formattedSort[field] = normalizeOrder(sortorderArray[index]);        });    }    Object.entries(sort).forEach(([field, order]) => {        formattedSort[field] = normalizeOrder(order);    });    if (!formattedSort.createdAt) {        formattedSort.createdAt = -1;    }    return {        skip: (page - 1) * limit,        limit: Number(limit),        page: Number(page),        sort: formattedSort,    };};

登录后复制

JavaScript 代码:

const formatPagination = (pagination) => {    const { limit = 10, page = 1, sortby, sortorder, sort = {} } = pagination;    const formattedSort = {};    const normalizeOrder = (value) => {        const numValue = Number(value);        if (!isNaN(numValue) && (numValue === 1 || numValue === -1)) {            return numValue;        } else {            return value === "asc" || value === "ascending" ? 1 : -1;        }    };    if (sortby) {        const sortbyArray = Array.isArray(sortby) ? sortby : [sortby];        const sortorderArray = Array.isArray(sortorder) ? sortorder : [sortorder];        sortbyArray.forEach((field, index) => {            formattedSort[field] = normalizeOrder(sortorderArray[index]);        });    }    Object.entries(sort).forEach(([field, order]) => {        formattedSort[field] = normalizeOrder(order);    });    if (!formattedSort.createdAt) {        formattedSort.createdAt = -1;    }    return {        skip: (page - 1) * limit,        limit: Number(limit),        page: Number(page),        sort: formattedSort,    };};

登录后复制

功能概述:

这段代码提供了一个函数 formatPagination,用于将各种分页和排序参数规范化为数据库查询或其他后端系统易于理解的格式。它支持多种排序参数格式,并提供默认值和默认排序字段 (createdAt) 以增强健壮性。

代码说明:

类型定义: SortOrder 枚举定义了所有支持的排序值。IPaginationFields 和 IFormattedPagination 接口定义了输入和输出对象的结构。

formatPagination 函数: 该函数解析输入参数,并将其转换为标准化的 IFormattedPagination 对象。 normalizeOrder 辅助函数将各种排序值(字符串或数字)转换为统一的 1 (升序) 或 -1 (降序) 表示。 函数处理 sortby/sortorder 和 sort 对象两种参数形式,并添加默认的 createdAt 排序。

示例用法: 提供的示例展示了如何使用该函数以及其输出结果。

主要优势:

灵活的输入: 支持多种排序参数格式,提高了代码的可复用性和灵活性。健壮性: 提供默认值和默认排序字段,确保即使输入参数不完整也能正常工作。可读性和可维护性: 使用 TypeScript 接口和类型定义,提高了代码的可读性和可维护性。标准化输出: 将排序参数转换为统一的格式,方便数据库查询或其他后端操作。

这个改进后的版本更简洁、更易于理解,并且更好地处理了各种输入情况。

以上就是多字段排序,为服务器端开发人员提供节省时间的功能(api分页)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2641939.html

(0)
上一篇 2025年3月7日 06:41:17
下一篇 2025年2月23日 12:03:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 全局范围和局部范围的定义

    JavaScript 中的作用域决定了变量的可访问性。主要分为两种作用域: 全局作用域: 在任何函数或代码块外部声明的变量拥有全局作用域。全局变量在程序的任何位置都可访问。过度使用全局变量被认为是不良编程习惯,因为它会增加代码维护和调试的难…

    2025年3月7日
    200
  • 反应点击编辑

    我发现许多react组件过于复杂,违背了“单一职责原则”。 为了练习npm包发布、ci/cd配置以及使用命名空间@nobrainers发布简单组件,我创建并发布了一个名为“react-click-edit”的新组件。 这是一个简洁的Reac…

    2025年3月7日
    200
  • 掌握 React:完整的 Web 开发指南

    在快节奏的 Web 开发领域,构建高效、强大的应用至关重要。Filestack 隆重推出 Filestack React JS 完整教程,一本全面指南,助您全面掌握 React JS 开发。 本教程通过实际案例、清晰步骤和实用技巧,帮助各水…

    2025年3月7日
    200
  • 浦那 IT 培训学院:Technolearn

    想在瞬息万变的IT行业提升技能或转型发展?浦那顶尖IT培训机构Technolearn将是您的理想之选!我们提供全面的课程,满足学生和专业人士的各种需求。 凭借卓越的教学成果,我们帮助学员掌握在竞争激烈的就业市场中脱颖而出的技能和知识。您的I…

    2025年3月7日
    200
  • 它很大,免费,可以改变你的网络开发者的生活

    一年一度的Vue.js Nation线上会议即将盛大开幕! 还记得初识Vue.js的兴奋吗?Nuxt 3发布在即,我恰好赶上了这波浪潮。从那时起,便开启了一段令人难忘的旅程。甚至在Nuxt 3测试阶段,我就成功说服团队将其应用于新项目,最终…

    2025年3月7日
    200
  • 为什么每个开发人员都应该学习 TypeScript:我的经验

    TypeScript已成为现代Web开发的颠覆性技术。起初,JavaScript是我处理前后端所有任务的首选语言。但随着项目规模的扩大,我开始面临挑战:运行时错误、代码库混乱以及对应用稳定性的担忧。这时,我决定尝试TypeScript,从此…

    2025年3月7日
    200
  • 每个开发人员都需要添加书签的重要网站

    在快节奏的软件开发领域,高效的工作流程和工具至关重要。无论您是资深程序员还是初学者,这五个网站都能帮助您攻克难题,提升技能,紧跟行业前沿。快来收藏它们吧! OverAPI – 一站式编程速查表 OverAPI 收集了各种编程语言和工具的速查…

    2025年3月7日 编程技术
    200
  • 如何 Dockerize 您的 Nextjs 应用程序:分步指南

    本文将指导您如何使用 docker 和 docker compose 容器化 next.js 应用,涵盖 dockerfile 创建、.dockerignore 文件设置以及 compose.yml 配置,从而简化开发和部署流程,确保跨环境…

    2025年3月7日
    200
  • 使用 svelte 教程创建表单

    告别后端烦恼:Svelte表单与FabForm的完美结合 构建网站时,表单提交常常成为后端开发的拦路虎。但有了表单后端服务(例如FabForm.io),这一切都将变得轻松便捷。它免去了您搭建服务器、管理数据库和处理邮件的繁琐步骤,让您专注于…

    2025年3月7日
    200
  • 表单后端教程

    轻松构建网站表单:使用fabform.io的完整指南 还在为网站表单的后端处理而烦恼吗?无论是收集用户反馈、联系信息还是活动报名,没有后端支持都将使表单的搭建和维护变得异常复杂。别担心,fabform.io为你提供了一个简单高效的解决方案!…

    2025年3月7日
    200

发表回复

登录后才能评论