コース一覧
    Node.jsバックエンド実践
    並び替えとページング

    Node.jsバックエンド実践

    入力検証、ミドルウェア、エラー処理、データベース接続を学び、実用的なバックエンドAPIを安全に組み立てられるようにします。

    1
    リクエスト処理と検証
    01. クエリパラメータ15分
    02. 並び替えとページング15分
    03. 入力検証15分
    04. ミドルウェア15分
    05. エラーハンドリング15分
    06. つくる:検索API完成20分
    07. 第5章クイズ10分
    2
    データベース接続
    01. DBにつなぐ15分
    02. 一覧・詳細をDB化15分
    03. 出品をDB化15分
    04. SQLインジェクション20分
    05. 更新・削除をDB化15分
    06. 購入トランザクション20分
    07. つくる:DB版fleama20分
    08. 第6章クイズ10分

    並び替えとページング

    全部返すと重くなる

    商品が 10 件なら全部返して構いません。10 万件になったらそうはいきません。返すのに時間がかかり、受け取る側も全部は表示しません。

    そこで一覧の API には、たいてい 2 つの機能が付きます。

    機能何をするか
    並び替えどの順に返すか
    ページング何件目から何件返すか

    どちらもクエリで指定します。前のレッスンの絞り込みと同じ考え方です。

    並び替え

    プレーンテキスト

    /items?sort=price

    受け取った側は、その項目で並べ替えて返します。

    JavaScript

    if (sort === "price") {
      found = found.sort((a, b) => a.price - b.price);
    }

    sort に渡す関数は、2 つを比べて「前に出すなら負の数」を返す約束です。a.price - b.price なら安い順、b.price - a.price なら高い順になります。

    sort は元の配列を書き換える

    注意すべき点があります。sort は新しい配列を作らず、元の配列そのものを並べ替えます。

    JavaScript

    items.sort((a, b) => a.price - b.price); // items 自体が変わる

    これをすると、次のリクエストでは並びが変わったままの items が使われます。元を残したいときは、先に写しを作ります。

    JavaScript

    const sorted = [...items].sort((a, b) => a.price - b.price);

    filter や map は新しい配列を返すので、この心配はありません。sort だけが例外だと覚えてください。

    ページング

    プレーンテキスト

    /items?limit=2&offset=2

    offset が「何件飛ばすか」、limit が「何件返すか」です。3 件目から 2 件、という指定になります。

    JavaScript

    const limit = Number(req.query.limit) || 10;
    const offset = Number(req.query.offset) || 0;
    
    found = found.slice(offset, offset + limit);

    slice は開始位置と終了位置を取るので、終わりは offset + limit になります。

    既定値を決めておくのが大切です。指定が無いときに全件返してしまっては、ページングを付けた意味がありません。

    手を動かす

    演習では、並び替えとページングを備えた一覧 API を作ります。元の配列を壊さないように書いてください。

    要件

    1. sort=price は価格の安い順、sort=name は名前の昇順に並べ替える
    2. limit(既定 2)と offset(既定 0)で切り出す
    3. 並べ替えで元の items を書き換えない

    ヒント

    まず `[...items]` で写しを作ります。ここを飛ばすと元の並びが壊れます

    `limit` と `offset` は文字列で届くので `Number(...)` で直し、`||` で既定値に落とします

    切り出しは `found.slice(offset, offset + limit)` です

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/10

    関連レッスン

    • 入力検証

      価格が数値かとタイトル必須を確かめ、不正な出品を弾けるようになります。

    • ミドルウェア

      ログ出力ミドルウェアを自作し、共通処理を挟めるようになります。

    • エラーハンドリング

      共通エラー処理で500を整形し、落ちないAPIにできるようになります。

    • つくる:検索API完成

      検索と検証を備え、フリマらしい絞り込みを完成できるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
    • APIアプリ間でデータをやり取りする窓口
    • 関数処理に名前を付けて再利用できる単位
    • 配列サイズ固定の同型データの集まり
    • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
    main.js
    エディタを読み込んでいます

    メモ

    並び替えとページング

    ⌘S で保存