1. 既定は先頭から2件
  2. 絞り込んでから安い順に並べる
  3. 絞り込んだ結果を切り出す
  4. 正しい出品は201
  5. 名前が空なら400
  6. 価格が文字列なら400
  7. エラーは500で受け止め、中身は出さない
コース一覧
Node.js入門
つくる:検索API完成

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分

つくる:検索API完成

新しいことは出てきません

この回では、新しい知識は 1 つも出てきません。第5章で書いたものを 1 つにまとめて、fleama の検索を仕上げます。

受け取り方の全体像

第5章で、リクエストから値を受け取る道が出そろいました。

どこから読み方使う場面
パスreq.paramsどのリソースか
クエリreq.queryどう絞り込むか
本文req.body何を登録・更新するか

どれも文字列で届くという点は共通です。req.body だけは express.json() を通しているので、数値は数値のまま届きます。

順番が決まっている

検索の処理には、自然な順番があります。

プレーンテキスト

絞り込む → 並べ替える → 切り出す

この順でないと結果が変わります。切り出してから絞り込むと、2 ページ目に表示される件数が足りなくなります。範囲を狭めるのは最後です。

守りの層が2つ付いた

第4章までの API は、素直な入力しか想定していませんでした。第5章で 2 つの層が付きます。

  1. 入力検証 — おかしな入力を 400 で弾く
  2. エラー用ミドルウェア — 想定外の失敗を 500 で受け止める

1 つ目は予想できる失敗、2 つ目は予想できない失敗の受け皿です。この 2 つがあると、API は簡単には落ちなくなります。

ここまでに手に入れたもの

何をどのレッスンで
条件をクエリで受け取るクエリパラメータ
並べ替えとページング並び替えとページング
必須・型・範囲を確かめる入力検証
共通処理を手前にまとめるミドルウェア
最後の受け皿を置くエラーハンドリング

手を動かす

演習では、第5章のすべてを備えた検索 API を組み立てます。絞り込み・並べ替え・切り出しの順番に気をつけてください。

要件

  1. GET /items は 絞り込む → 並べ替える → 切り出す の順に処理する
  2. POST /items は name 必須と price の型を確かめ、通れば「最大の id + 1」で 201 を返す
  3. すべてのルートより後にエラー用ミドルウェアを置き、500 で {"error":"サーバーで問題が起きました"} を返す

入出力例

request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー","price":4800},{"id":2,"name":"ランニングスニーカー","price":3200}]" request("GET", "/items?keyword=スニーカー&sort=price") → "200 [{"id":2,"name":"ランニングスニーカー","price":3200},{"id":1,"name":"レザースニーカー","price":4800}]" request("GET", "/items?keyword=スニーカー&limit=1&offset=1") → "200 [{"id":2,"name":"ランニングスニーカー","price":3200}]" request("POST", "/items", {"name":"木製のスツール","price":3500}) → "201 {"id":4,"name":"木製のスツール","price":3500}" request("POST", "/items", {"name":"","price":3500}) → "400 {"error":"商品名は必須です"}" request("POST", "/items", {"name":"木製のスツール","price":"3500"}) → "400 {"error":"価格は数値で指定してください"}" request("GET", "/boom") → "500 {"error":"サーバーで問題が起きました"}"

ヒント

`GET /items` は写しを作ってから、絞り込む・並べ替える・切り出すの順に処理します

`POST /items` は登録の処理より前に、2 つの `if` を置きます

エラー用ミドルウェアは引数 4 つで、`return app;` の直前に置きます

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

関連レッスン

  • 第5章クイズ

    リクエスト処理と検証の理解を4択で確認します。

  • DBにつなぐ

    接続して1行取り出すところまで確かめ、NodeからSQLを発行できるようになります。

  • 認証と認可

    未ログインで出品APIを叩いて課題を確かめ、認証と認可を区別できるようになります。

  • fleama API完成

    第4章で作った一覧表と突き合わせ、仕様を満たし切れるようになります。

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

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

  • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
  • 処理計算や代入を表す長方形
  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
  • ミドルウェアリクエストとレスポンスの間に挟まる処理関数。
  • クエリパラメータURL の `?` 以降に付ける `key=value` 形式のリクエストデータ
main.js
学習モード
エディタを読み込んでいます

メモ

つくる:検索API完成

⌘S で保存