NESTJSのカスタムページ付けのデコレータ、Paginationは簡単になりました!

3884 ワード


このチュートリアルでは、Nestjs decoratorsの有効利用を可能にする良い方法です.NESTJSフレームワークについて読んだことがないなら、それは時間だと思います.ドキュメントを読んだら、それを使うのが好きです.
あまり紹介しないでください、そして、コードとうまくやってください!
内部端子
nest new pagination-app
これはあなたのための新しい新鮮なNESTJSアプリを作成します、それはあなたの好みのパッケージモジュール(NPM、糸、…等)をお好みの選択をお勧めします.
内部のページネーション.TS ( src/types/)
export interface Pagination {
    skip?:number;
    limit?:number;
    sort?:{ field:string, by:"ASC" | "DESC" }[];
    search?:{ field:string, value:string }[];
}
ここでは、クライアントから期待するページ化インターフェイスを作成します.これらは、ページネーション用に送信できる最も重要なクエリパラメータです.
内部取得ページ.TS ( SRC/Decorator/
import { createParamDecorator, ExecutionContext } from "@nestjs/common";
import { Request } from "express";
import { Pagination } from "../types/pagination";

export const GetPagination = createParamDecorator((data, ctx:ExecutionContext) : Pagination => {
    const req : Request = ctx.switchToHttp().getRequest();

    const paginationParams : Pagination = {
        skip:0,
        limit:10,
        sort:[],
        search:[]
    };

    paginationParams.skip = req.query.skip ? parseInt(req.query.skip.toString()) : 0;
    paginationParams.limit = req.query.limit ? parseInt(req.query.limit.toString()) : 10;

    // create array of sort
    if(req.query.sort){
        const sortArray = req.query.sort.toString().split(',')
        paginationParams.sort = sortArray.map(sortItem => {
            const sortBy = sortItem[0]
            switch (sortBy) {
                case "-":
                    return{
                        field:sortItem.slice(1),
                        by:'ASC'
                    }
                case "+":
                    return{
                        field:sortItem.slice(1),
                        by:'ASC'
                    }
                default:
                    return{
                        field:sortItem.trim(),
                        by:'DESC'
                    }
            }
        })
    }

    // create array of search
    if(req.query.search){
        const searchArray = req.query.search.toString().split(',')
        paginationParams.search = searchArray.map(searchItem => {
            const field = searchItem.split(":")[0]
            const value = searchItem.split(":")[1]
            return {
                field,
                value
            }
        })
    }

    return paginationParams;
})
ここでは、現在のコンテキストからリクエストを取得します.これは、同じプロパティを持つExpressリクエストオブジェクトと同じです.
* paginationParamsには、ページ付けのデフォルト値が含まれます.
*クエリに基づいてPaginationスキップと制限を設定し、3項演算子を使用して、制限値とスキップクエリパラメータを数値に解析することができます.
*並べ替えのために、フィールドを並べ替え順に並べ替えるための多くの方法があります.
検索のために、フィールドと値との間には、**
内部アプリコントローラ.ts ( src/
...
@Get('/cats')
  getCats(@GetPagination() pagination : Pagination): string {
    return this.appService.getCats(pagination);
  }
...
アプリ内サービス.ts ( src/
...
getCats(pagination:Pagination){
    return pagination;
  }
...
ちょうどそれを返す代わりに、データベースに接続されているこのサービスを持つことができますし、DBのクエリ値を使用しているが、単純さのために我々はコンソールにそれをログに記録されます.
それを試してみましょう、npm run start:devでアプリを実行してみましょう
このURLを打ちましょう
official page
私はあなたがこのチュートリアルが好きだったことを願って、私は本当にあなたがNESTJSフレームワークを使用するようにアドバイスし、さらにそれがドキュメントの読み取りに行く!
よい一日をお過ごしください