1. 更新すると新しい内容が返る
  2. 無い id の更新は404
  3. 削除は204で本文なし
  4. 無い id の削除は404
  5. 触っていなければ一覧は2件のまま
コース一覧
Node.js入門
更新・削除をDB化

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分

更新・削除をDB化

変更系も run で行う

更新も削除も、書き込みなので run を使います。

JavaScript

db.prepare("UPDATE items SET name = ?, price = ? WHERE id = ?").run(name, price, id); db.prepare("DELETE FROM items WHERE id = ?").run(id);

プレースホルダは並んだ順に埋まります。WHERE に入る id も値なので、こちらも ? です。外から来た値は全部 ? に渡す、と覚えてください。

WHERE を書き忘れると全件が変わる

もっとも怖い書き間違いがこれです。

SQL クエリ

UPDATE items SET sold = 1; -- 全商品が売り切れになる DELETE FROM items; -- 全商品が消える

どちらもエラーになりません。そう書いたのだから、そのとおり実行されます。変更系を書いたら、WHERE があるかを必ず見てください。

何件変わったかで判断する

第4章では、更新の前に find で対象を探して 404 を判定していました。データベースなら、実行の結果から分かります。

JavaScript

const result = db.prepare("UPDATE items SET name = ? WHERE id = ?").run(name, id); if (result.changes === 0) { return res.status(404).json({ error: "商品が見つかりません" }); }

changes に、実際に変わった行数が返ります。0 なら、その id の商品が無かったということです。探してから更新する 2 往復が、1 回で済みます。

削除も同じです。changes が 0 なら 404 を返します。

更新したものを返す

更新の応答には、更新後の内容を返します。run は行そのものを返さないので、読み直します。

JavaScript

const updated = db.prepare("SELECT id, name, price FROM items WHERE id = ?").get(id); res.json(updated);

削除は 204 なので、本文はありません。読み直す必要もありません。

手を動かす

演習では、更新と削除をデータベースに置き換えます。changes で 404 を見分けてください。

要件

  1. PUT /items/:id は UPDATE して、更新後の {id, name, price} を返す
  2. DELETE /items/:id は DELETE して 204 を本文なしで返す
  3. どちらも changes が 0 なら 404 で {"error":"商品が見つかりません"} を返す

入出力例

request("PUT", "/items/1", {"name":"革のスニーカー","price":5200}) → "200 {"id":1,"name":"革のスニーカー","price":5200}" request("PUT", "/items/999", {"name":"x","price":1}) → "404 {"error":"商品が見つかりません"}" request("DELETE", "/items/1") → "204 " request("DELETE", "/items/999") → "404 {"error":"商品が見つかりません"}" request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー","price":4800},{"id":2,"name":"古着のデニムジャケット","price":6200}]"

ヒント

`WHERE id = ?` を必ず書きます。忘れると全件が変わります

`run(...)` の戻り値の `changes` が 0 なら、その id は無かったということです

更新後の内容は `run` では返らないので、`SELECT` で読み直します

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

関連レッスン

  • 購入トランザクション

    売切れ化と購入記録を不可分にし、複数の更新を一括で処理できるようになります。

  • つくる:DB版fleama

    全APIをDBで動かし、データ層を丸ごと移行できるようになります。

  • 第6章クイズ

    データベース接続とトランザクションの理解を4択で確認します。

  • 認証と認可

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

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

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

  • プレースホルダSQL の `?` 部分にあとから値を入れる仕組み
  • 判断YES/NO 分岐を表す菱形
  • データベースデータを構造化して保存する仕組み
main.js
学習モード
エディタを読み込んでいます

メモ

更新・削除をDB化

⌘S で保存