1. 条件が無ければ全件
  2. キーワードで絞り込む
  3. カテゴリで絞り込む
  4. 両方指定すると両方を満たすものだけ
  5. 当てはまらなければ空の配列
コース一覧
Node.js入門
クエリパラメータ

Node.js入門

Node.jsの実行モデル、npm、Expressによるルーティング、REST API設計、データベース接続、トランザクションを使った購入処理、トークン認証まで、バックエンド開発の基礎を、毎レッスン実際にコードを書き、フリマアプリのAPIを自分の手で作りながら学びます。

1
Node.jsとは
01. Node.jsとは15分
02. スクリプトを実行する15分
03. npmとは15分
04. package.json15分
05. npmスクリプト15分
06. つくる:プロジェクト始動20分
07. 第1章クイズ10分
2
モジュールと非同期の復習
01. import/export15分
02. ファイルを読み書きする15分
03. async/await復習15分
04. JSONの取り回し15分
05. つくる:データ層20分
06. 第2章クイズ10分
3
はじめてのサーバー
01. サーバーとリクエスト15分
02. Expressを導入する15分
03. ルーティング15分
04. JSONを返す15分
05. 開発の回し方15分
06. つくる:サーバー始動20分
07. 第3章クイズ10分
4
REST APIのきほん
01. RESTの考え方15分
02. 一覧を返す15分
03. 1件を返す15分
04. 登録を受ける15分
05. 更新と削除15分
06. ステータスコード15分
07. つくる:商品CRUD完成20分
08. 第4章クイズ10分
5
リクエスト処理と検証
01. クエリパラメータ15分
02. 並び替えとページング15分
03. 入力検証15分
04. ミドルウェア15分
05. エラーハンドリング15分
06. つくる:検索API完成20分
07. 第5章クイズ10分
6
データベース接続
01. DBにつなぐ15分
02. 一覧・詳細をDB化15分
03. 出品をDB化15分
04. SQLインジェクション20分
05. 更新・削除をDB化15分
06. 購入トランザクション20分
07. つくる:DB版fleama20分
08. 第6章クイズ10分
7
認証のきほん
01. 認証と認可15分
02. パスワードハッシュ15分
03. ログインとトークン15分
04. 保護ルート15分
05. 本人のものだけ15分
06. つくる:認証完備20分
07. 第7章クイズ10分
8
総合制作
01. fleama API完成20分
02. Reactと接続する20分
03. サーバーで常駐させる20分
04. 自由拡張20分
05. 完成と次のステップ15分

クエリパラメータ

絞り込みはパスに入れない

フリマで「靴」を探したいとき、こういうパスを作りたくなります。

プレーンテキスト

/items/search/靴

ですが条件が増えると破綻します。カテゴリでも絞りたい、価格の上限も付けたい、となったときにパスの形が決められません。

絞り込みの条件は、パスではなくクエリパラメータで渡します。

プレーンテキスト

/items?keyword=靴&category=shoes

? から後ろがクエリです。& で区切っていくつでも並べられ、順番も問いません。

パスとクエリの使い分け

表すもの例
パスどのリソースか/items/1
クエリどう絞り込むか/items?keyword=靴

そのものを指すのがパス、条件を添えるのがクエリです。/items は条件が付いても /items のままなので、リソースの構造が崩れません。

req.query から読む

読み方は req.params とよく似ています。

JavaScript

app.get("/items", (req, res) => { const keyword = req.query.keyword; const category = req.query.category; });

?keyword=靴 なら req.query.keyword は "靴" です。

無いときは undefined になる

クエリは付いていないこともあります。/items とだけ呼ばれたら req.query.keyword は undefined です。

ですから、無いときにどうするかを必ず決めます。

JavaScript

const keyword = req.query.keyword || "";

|| は「左が空っぽなら右を使う」という書き方です。これで、条件が無いときは絞り込まない、という自然な形になります。

こちらも文字列で届く

第4章の req.params と同じで、クエリの値もすべて文字列です。

JavaScript

const limit = req.query.limit; // "5" const limit2 = Number(req.query.limit); // 5

数として使うなら直します。この取り違えは、次のレッスンの並び替えとページングでも効いてきます。

手を動かす

演習では、キーワードとカテゴリで商品を絞り込む API を作ります。条件が無いときの振る舞いにも気を配ってください。

要件

  1. keyword があれば name にその文字が含まれるものだけに絞る
  2. category があれば category が一致するものだけに絞る
  3. どちらも無ければ全件を返す(返す項目は id name category の 3 つ)

入出力例

request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー","category":"shoes"},{"id":2,"name":"古着のデニムジャケット","category":"tops"},{"id":3,"name":"ランニングスニーカー","category":"shoes"}]" request("GET", "/items?keyword=スニーカー") → "200 [{"id":1,"name":"レザースニーカー","category":"shoes"},{"id":3,"name":"ランニングスニーカー","category":"shoes"}]" request("GET", "/items?category=tops") → "200 [{"id":2,"name":"古着のデニムジャケット","category":"tops"}]" request("GET", "/items?keyword=ランニング&category=shoes") → "200 [{"id":3,"name":"ランニングスニーカー","category":"shoes"}]" request("GET", "/items?keyword=帽子") → "200 []"

ヒント

`req.query.keyword` は指定が無いと `undefined` です。`|| ""` で空文字に落とします

絞り込みは `filter` を重ねます。条件があるときだけ絞る形にします

文字が含まれるかどうかは `item.name.includes(keyword)` で確かめられます

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

関連レッスン

  • 並び替えとページング

    新着順と価格順にページングを添え、一覧を制御できるようになります。

  • 入力検証

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

  • ミドルウェア

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

  • エラーハンドリング

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

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

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

  • クエリパラメータURL の `?` 以降に付ける `key=value` 形式のリクエストデータ
  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
main.js
学習モード
エディタを読み込んでいます

メモ

クエリパラメータ

⌘S で保存