Astro → Cloudflare Workers

Page content

Astro → Cloudflare Workers に fetch でAPIを叩く基本パターンを、そのまま使える形でまとめます。
(あなたの構成:Astro(Pages)+ Worker API を想定)


✅ ① Cloudflare Worker 側(API)

まずは Worker にJSONを返すAPIを用意👇

export default {
  async fetch(request) {
    return new Response(
      JSON.stringify({ message: "Hello from Worker!" }),
      {
        headers: { "Content-Type": "application/json" },
      }
    );
  },
};

デプロイするとこんなURLになります👇

https://your-worker-name.workers.dev

✅ ② Astro 側(クライアントからfetch)

ブラウザから叩く場合(ボタンなど)

<button onclick="callApi()">API実行</button>

<script>
async function callApi() {
  const res = await fetch("https://your-worker-name.workers.dev");
  const data = await res.json();
  alert(data.message);
}
</script>

👉 一番シンプルな形(今あなたがやってる形)


✅ ③ Astro 側(サーバーサイドでfetch)←重要

Astroの .astro ファイル内で直接呼ぶ方法👇

---
const res = await fetch("https://your-worker-name.workers.dev");
const data = await res.json();
---

<h1>{data.message}</h1>

👉 これが SSR(サーバーサイドレンダリング)版


✅ ④ APIルートとして使う(おすすめ構成)

AstroのAPIルート経由でWorkerを叩く👇

/src/pages/api/test.ts

export async function GET() {
  const res = await fetch("https://your-worker-name.workers.dev");
  const data = await res.json();

  return new Response(JSON.stringify(data), {
    headers: { "Content-Type": "application/json" },
  });
}

フロントから呼ぶ

<button onclick="callApi()">API実行</button>

<script>
async function callApi() {
  const res = await fetch("/api/test");
  const data = await res.json();
  alert(data.message);
}
</script>

✅ ⑤ CORSエラー対策(重要)

Worker側でこれを入れておく👇

headers: {
  "Content-Type": "application/json",
  "Access-Control-Allow-Origin": "*",
}

👉 これを入れないとブラウザfetchでエラー出る


✅ ⑥ 本番でよくあるミス

❌ よくあるエラー

  • ERR_SSL_VERSION_OR_CIPHER_MISMATCH

  • fetch failed

  • CORSエラー

✔ 原因

  • PagesとWorkerのURLが違う

  • Routes未設定

  • HTTPS設定ミス


✅ ⑦ 最強構成(実務向け)

Astro(Pages) → 自前API → Worker

ブラウザ
   ↓
Astro API (/api)
   ↓
Cloudflare Worker

👉 メリット

  • CORS不要

  • セキュリティ強い

  • URL隠せる


🔥 まとめ

  • フロント直叩き → 簡単だがCORS必要

  • SSR → SEO向き

  • API経由 → 最強・実務向け