コース一覧
    Node.js認証・本番運用
    Reactと接続する

    Node.js認証・本番運用

    認証、認可、フロントエンド連携、本番運用を学び、Node.jsで保守可能なサービスを完成させられるようにします。

    1
    認証のきほん
    01. 認証と認可15分
    02. パスワードハッシュ15分
    03. ログインとトークン15分
    04. 保護ルート15分
    05. 本人のものだけ15分
    06. つくる:認証完備20分
    07. 第7章クイズ10分
    2
    総合制作
    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() を呼ぶ

    ヒント

    `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 で保存