1. 一覧が返り、メールは含まれない
  2. 0件でも配列を200で返す
コース一覧
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分

一覧を返す

設計図の1行目を実装する

前のレッスンで書いた表の 1 行目から始めます。

プレーンテキスト

GET /items 商品一覧を返す

第3章で似たものを作りました。今回はそれを、API として使える形に整えます。

一覧は必ず配列で返す

商品が 1 件でも、0 件でも、返すのは配列です。

JavaScript

app.get("/items", (req, res) => { res.json(items); });

0 件のときに { "message": "商品がありません" } のようなオブジェクトを返したくなりますが、してはいけません。受け取る側が困るからです。

JavaScript

// 受け取る側 const items = await response.json(); items.map((item) => ...); // 配列でないと落ちる

同じパスは、いつ呼んでも同じ形を返す。 中身が空でも形は変えない、というのが約束です。0 件なら [] を返します。

空も正常です

商品が 1 件も無いのは、エラーではありません。「探したけれど無かった」は、探す処理としては成功しています。

ですから 404 ではなく 200 を返し、本文は [] にします。404 は「そのパス自体が無い」ときのものです。次のレッスンで、404 を返すべき場面が出てきます。

返す前に整える

第3章で触れたとおり、持っているものを全部返す必要はありません。

JavaScript

app.get("/items", (req, res) => { res.json(items.map((item) => ({ id: item.id, name: item.name, price: item.price, sold: item.sold, }))); });

一覧に出す項目は、一覧の画面で必要なものだけです。出品者の連絡先や、商品説明の長い文章は、詳細を見るときに取れば足ります。一覧が軽くなるという実利もあります。

手を動かす

演習では、商品一覧の API を作ります。空のときの振る舞いにも気を配ってください。

要件

  1. GET /items は id name price sold だけにした商品の配列を返す
  2. GET /empty は空の配列 [] を 200 で返す
  3. どちらも ownerEmail を含めない

入出力例

request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー","price":4800,"sold":false},{"id":2,"name":"古着のデニムジャケット","price":6200,"sold":false},{"id":3,"name":"木製のスツール","price":3500,"sold":true}]" request("GET", "/empty") → "200 []"

ヒント

初期コードは `items` をそのまま返しているので、`ownerEmail` まで外に出ています

1 件を必要な項目だけに整える関数を作って、`items.map(...)` に渡します

0 件のときもオブジェクトではなく配列を返します。`res.json([])` です

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

関連レッスン

  • 1件を返す

    商品詳細APIを書き、見つからないときに404を返せるようになります。

  • 登録を受ける

    出品APIを書き、作成したときに201を返せるようになります。

  • 更新と削除

    商品編集と取下げのAPIを書き、変更系を実装できるようになります。

  • ステータスコード

    各APIの返却コードを整え、状況に応じた番号を返せるようになります。

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

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

  • 設計何をどう作るかを決める前工程
  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
  • 配列サイズ固定の同型データの集まり
  • オブジェクトキーと値のペアで構造を作るデータ
  • 処理計算や代入を表す長方形
main.js
学習モード
エディタを読み込んでいます

メモ

一覧を返す

⌘S で保存