1. 許可の設定が入っている
  2. もとの API はそのまま動く
コース一覧
Node.js入門
Reactと接続する

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分

Reactと接続する

モックを本物に差し替える

React 実践でフリマの画面を作ったとき、商品一覧はモックの偽データを返していました。ここでその裏を、いま作った API に差し替えます。

JavaScript

// これまで モックを見ていた const response = await fetch("/api/items"); // これから 自分の API を見る const response = await fetch("http://localhost:3000/items");

受け取る形は同じ JSON なので、画面側のコードはほとんど変わりません。同じ形を返す約束を守ってきたからです。

つなぐと最初に出る壁

差し替えると、たいていブラウザのコンソールにこう出ます。

プレーンテキスト

Access to fetch has been blocked by CORS policy

これはブラウザの安全装置です。React は 5173 番、API は 3000 番と、別の場所で動いているため、既定では通信が止められます。

この仕組みが無いと、あなたが開いた悪意のあるページが、裏で別のサイトの API を勝手に叩けてしまいます。ですから止めること自体は正しい動きです。

許可を明示する

サーバー側で「この相手からは受け付ける」と表明します。

JavaScript

app.use((req, res, next) => { res.setHeader("Access-Control-Allow-Origin", "http://localhost:5173"); res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE"); res.setHeader("Access-Control-Allow-Headers", "Content-Type,Authorization"); next(); });

これもミドルウェアです。第5章で学んだ形が、ここでも使えます。

* は使わない

JavaScript

res.setHeader("Access-Control-Allow-Origin", "*"); // 避けたい

* は「どこからでもよい」という意味です。動くので使われがちですが、fleama のようにトークンを扱う API では危険です。

許す相手は書き出す。 開発中は http://localhost:5173、公開したらそのアドレスに変えます。

先に確認の問い合わせが来る

PUT や DELETE、Authorization ヘッダーを付けたリクエストでは、ブラウザが本番の前に OPTIONS という確認の問い合わせを送ります。

これに答えないと、本番のリクエストは飛んできません。上のミドルウェアがヘッダーを返していれば、たいていはそのまま通ります。

手を動かす

演習では、CORS を許可するミドルウェアを書きます。許す相手を明示してください。

要件

  1. Access-Control-Allow-Origin に http://localhost:5173 を設定する(* は使わない)
  2. Access-Control-Allow-Methods に GET,POST,PUT,DELETE を設定する
  3. Access-Control-Allow-Headers に Content-Type,Authorization を設定し、next() を呼ぶ

入出力例

request("GET", "/cors-check") → "200 {"origin":"http://localhost:5173","methods":"GET,POST,PUT,DELETE","headers":"Content-Type,Authorization"}" request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー"}]"

ヒント

`app.use((req, res, next) => {...})` を、ルートより前に置きます

設定するのは `res.setHeader("名前", "値")` です。3 つ書きます

最後に `next()` を呼びます。忘れると応答が返りません

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

関連レッスン

  • サーバーで常駐させる

    常駐の設定を書き、本番の形で動かせるようになります。

  • 自由拡張

    欲しいAPIを設計から実装し、自分で機能を足せるようになります。

  • 完成と次のステップ

    作ったAPIの全体像を振り返り、フルスタックの流れを語れるようになります。

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

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

  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
  • applicationJSON 本文を送るときの Content-Type
  • ブラウザユーザーから見たWebのクライアント
  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • ミドルウェアリクエストとレスポンスの間に挟まる処理関数。
  • トークンLLM が扱う最小の文字単位
  • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
main.js
学習モード
エディタを読み込んでいます

メモ

Reactと接続する

⌘S で保存