"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 서버 측 개발자를위한 시간 절약 기능 (API Pagination)으로 여러 필드 정렬

서버 측 개발자를위한 시간 절약 기능 (API Pagination)으로 여러 필드 정렬

2025-02-24에 게시되었습니다
검색:960

Multiple fields sorting with a time saving function for server side developer (api pagination)

응용 프로그램 시나리오 :

여러 정렬 방법을 지원합니다 :

  • asc https : // your-url? sort [first_name] = desc & sort [last_name] = asc
  • ]
  • 오름차순 또는 내림차순을 사용하십시오 : https : // your-url? sort [first_name] = 오름차순 및 정렬 [last_name] = 하강
  • 이 함수는 sortby
sortorder

필드를 사용하여 정렬을 지원합니다 : https : // your-url? sortorder = desc & sortby = last_name ]] TypeScript 코드 :

"ASC"| 인터페이스 IpaginationFields 내보내기 { 페이지? : 숫자; 한계 : 숫자; Sortby? : String |; Sortorder? : Isortorder |. 정렬? : 레코드 ; } 인터페이스 iformatedPagination 내보내기 { 건너 뛰기 : 번호; 페이지 : 번호; 한계 : 숫자; 정렬 : {[키 : 문자열] : 1 |. } 내보내기 const formatpagination = (Pagination : iPaginationfields) : iforMatedPagination => { const {limit = 10, page = 1, sortby, sortorder, sort} = Pagination; const formattedSort : {[key : string] : 1 | -1}; const normalizeorder = (순서 : 문자열 | 번호) : 1 |. const numorder = 숫자 (주문); if (! isnan (numorder) && (numorder === 1 || numorder === -1)) return numorder; return (order === "asc"|| order === "오름차순"); }; if (sortby) { const sortbyArray = array.isarray (sortby) : [sortby]; const sortorderArray = array.isArray (sortorder) : [sortorder]; SortByArray.foreach ((필드, 인덱스) => { FormattedSort [field] = NormalizeOrder (SortOrderArray [index]); }); } if (sort && typeof sort === 'Object'&&! array.isarray (sort)) { Object.entries (sort) .foreach (([field, order]) => { FormattedSort [field] = NormalizeOrder (Order); }); } if (! formattedSort.createdat) { FormattedSort.createdat = -1; } 반품 { 건너 뛰기 : (페이지 -1) * 제한, 제한 : 제한, 페이지 : 페이지, 정렬 : 형식화 소트, }; };

type ISortOrder = "asc" | "desc" | "ascending" | "descending" | 1 | -1;

export interface IPaginationFields {
    page?: number;
    limit?: number;
    sortBy?: string | string[];
    sortOrder?: ISortOrder | ISortOrder[];
    sort?: Record;
}

export interface IFormatedPagination {
    skip: number;
    page: number;
    limit: number;
    sort: { [key: string]: 1 | -1 };
}

export const formatPagination = (pagination: IPaginationFields): IFormatedPagination => {
    const { limit = 10, page = 1, sortBy, sortOrder, sort } = pagination;

    const formattedSort: { [key: string]: 1 | -1 } = {};

    const normalizeOrder = (order: string | number): 1 | -1 => {
        const numOrder = Number(order);
        if (!isNaN(numOrder) && (numOrder === 1 || numOrder === -1)) return numOrder;
        return (order === "asc" || order === "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]);
        });
    }

    if (sort && typeof sort === 'object' && !Array.isArray(sort)) {
        Object.entries(sort).forEach(([field, order]) => {
            formattedSort[field] = normalizeOrder(order);
        });
    }

    if (!formattedSort.createdAt) {
        formattedSort.createdAt = -1;
    }

    return {
        skip: (page - 1) * limit,
        limit: limit,
        page: page,
        sort: formattedSort,
    };
};

const formatpagination = (Pagination) => { const {limit = 10, page = 1, sortby, sortorder, sort} = Pagination; const formattedSort = {}; const normalizeorder = (order) => { const numorder = 숫자 (주문); if (! isnan (numorder) && (numorder === 1 || numorder === -1)) return numorder; return (order === "asc"|| order === "오름차순"); }; if (sortby) { const sortbyArray = array.isarray (sortby) : [sortby]; const sortorderArray = array.isArray (sortorder) : [sortorder]; SortByArray.foreach ((필드, 인덱스) => { FormattedSort [field] = NormalizeOrder (SortOrderArray [index]); }); } if (sort && typeof sort === 'Object'&&! array.isarray (sort)) { Object.entries (sort) .foreach (([field, order]) => { FormattedSort [field] = NormalizeOrder (Order); }); } if (! formattedSort.createdat) { FormattedSort.createdat = -1; } 반품 { 건너 뛰기 : (페이지 -1) * 제한, 제한 : 제한, 페이지 : 페이지, 정렬 : 형식화 소트, }; };

const formatPagination = (pagination) => {
    const { limit = 10, page = 1, sortBy, sortOrder, sort } = pagination;

    const formattedSort = {};

    const normalizeOrder = (order) => {
        const numOrder = Number(order);
        if (!isNaN(numOrder) && (numOrder === 1 || numOrder === -1)) return numOrder;
        return (order === "asc" || order === "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]);
        });
    }

    if (sort && typeof sort === 'object' && !Array.isArray(sort)) {
        Object.entries(sort).forEach(([field, order]) => {
            formattedSort[field] = normalizeOrder(order);
        });
    }

    if (!formattedSort.createdAt) {
        formattedSort.createdAt = -1;
    }

    return {
        skip: (page - 1) * limit,
        limit: limit,
        page: page,
        sort: formattedSort,
    };
};
이 코드는 페이징 및 정렬 필드의 인터페이스와 데이터베이스 쿼리 또는 기타 페이징 사용 사례에 적합한 구조로 이러한 필드를 포맷하는 실질적인 기능을 정의합니다. 이 유틸리티는 페이징 및 분류 프로세스를 표준화하는 데 도움이됩니다.

코드 설명

]]]

인터페이스

iSortorder : 정렬 순서를 나타내는 가능한 값 : "ASC", "Desc", "Ascending", "Iscending", 1, -1.

]]]]]]] (선택 사항),

sortorder (선택 사항), sort

(선택 사항).

iformatedPagination : 형식의 예약의 출력 구조를 설명합니다. ]]]. formatpagination 함수 이 기능은 입력 페이징 개체를 처리하고 표준화 된 형식으로 변환합니다. 매개 변수

Pagination : iPaginationfields 인터페이스를 구현하는 객체. 단계

기본값

: 기본값을

한계 (10) 및 페이지

(1)에 할당합니다. 빈 객체를 초기화
    FormattedSort
  • 는 형식의 정렬 필드를 저장하는 데 사용됩니다.
  • 헬퍼 함수 :
정상화기

: 주어진 정렬 순서 (값)을 숫자 형식 (1 또는 -1)으로 변환합니다.

  • 핸들 sortby sortorder : sortby

    sortorder
  • 가 배열 또는 단일 값 인 경우를 처리합니다. , 배열로 변환하고 (아직 아님)
  • 형식의 형식화 된

    정상화기 로 추가하십시오.

  • FormattedSort
  • 에 추가됩니다.

    기본 정렬 필드 : formattedSort createdat 필드를 포함하지 않는 경우 (-1). return result

    : 다음 속성이있는 객체를 반환합니다. ]].].
  • const Pagination = { 페이지 : 2, 한계 : 20, Sortby : , Sortorder : , 정렬 : {age : 1, score : -1}, }; const formatted = FormatPagination (Pagination); Console.log (형식); 주요 함수

  • Flexible Input :
  • sortby

    sortorder 의 단일 및 배열 값을 프로세스합니다. 기본값 : 입력이 불완전하더라도 페이징이 제대로 작동하도록합니다. 기본 정렬 : 폴백 정렬 필드를 추가합니다 (

    createat
  • ).
  • Custom Sort : 지원 정렬 객체를 복잡한 정렬 시나리오를 처리합니다. 이 유틸리티는 REST API 또는 데이터베이스 쿼리와 같은 표준화 된 페이징 및 정렬이 필요한 응용 프로그램에 이상적입니다. 이 개정 된 응답은 더 자세한 설명과 개선 된 코드 선명도를 제공하여 잠재적 인 문제를 해결하고 더 나은 시각적 프레젠테이션을 위해 형식화됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3