← Cloudflare Pages / pages / tutorials
Vytvoření API pro frontend pomocí Pages Functions
V tomto tutoriálu vytvoříte full-stack aplikaci v Pages. Vaše aplikace bude obsahovat:
- Frontend vytvořený pomocí Cloudflare Pages a Framework React.
- JSON API vytvořené pomocí Pages Functions, která vrací příspěvky na blogu, jež lze načíst a vykreslit na vašem frontendu.
Pokud pro vykreslování obsahu svého blogu dáváte přednost headless CMS před API, přečtěte si tutoriál pro headless CMS.
Video návod
1. Sestavte svůj frontend
Nejprve vytvořte novou aplikaci Pages pomocí frameworku React.
Vytvořte nový projekt React
V terminálu vytvořte nový projekt React s názvem blog-frontend pomocí create-vite příkaz. Přejděte do nově vytvořeného blog-frontend adresář a spusťte lokální vývojový server:
npx create-vite -t react blog-frontend
cd blog-frontend
npm install
npm run devNastavení projektu React
Chcete-li nastavit svůj projekt React:
- Nainstalujte React Router ↗ v kořenovém adresáři vašeho
blog-frontendadresář.
npm i react-router-dom@6- Vymažte obsah
src/App.js. Zkopírujte a vložte následující kód, kterým naimportujete React Router doApp.js, a nastavte nový router se dvěma trasami:
import { Routes, Route } from "react-router-dom";
import Posts from "./components/posts";
import Post from "./components/post";
function App() {
return (
<Routes>
<Route path="/" element={<Posts />} />
<Route path="/posts/:id" element={<Post />} />
</Routes>
);
}
export default App;- V
srcadresáři vytvořte novou složku s názvemcomponents. - V
componentsadresáři vytvořte dva soubory:posts.js, apost.js. Tyto soubory načtou příspěvky na blogu z vašeho API a vykreslí je. - Naplňte
posts.jss následujícím kódem:
import React, { useEffect, useState } from "react";
import { Link } from "react-router-dom";
const Posts = () => {
const [posts, setPosts] = useState([]);
useEffect(() => {
const getPosts = async () => {
const resp = await fetch("/api/posts");
const postsResp = await resp.json();
setPosts(postsResp);
};
getPosts();
}, []);
return (
<div>
<h1>Posts</h1>
{posts.map((post) => (
<div key={post.id}>
<h2>
<Link to={`/posts/${post.id}`}>{post.title}</Link>
</h2>
</div>
))}
</div>
);
};
export default Posts;- Naplňte
post.jss následujícím kódem:
import React, { useEffect, useState } from "react";
import { Link, useParams } from "react-router-dom";
const Post = () => {
const [post, setPost] = useState({});
const { id } = useParams();
useEffect(() => {
const getPost = async () => {
const resp = await fetch(`/api/post/${id}`);
const postResp = await resp.json();
setPost(postResp);
};
getPost();
}, [id]);
if (!Object.keys(post).length) return <div />;
return (
<div>
<h1>{post.title}</h1>
<p>{post.text}</p>
<p>
<em>Published {new Date(post.published_at).toLocaleString()}</em>
</p>
<p>
<Link to="/">Go back</Link>
</p>
</div>
);
};
export default Post;2. Sestavte své API
Nyní vytvoříte Pages Functions, které ukládá obsah vašeho blogu a načítá jej přes JSON API.
Napište svou Pages Function
Chcete-li vytvořit funkci Pages Function, která bude fungovat jako vaše JSON API:
- Vytvořte
functionsadresář ve vašemblog-frontendadresář. - V
functions, vytvořte adresář s názvemapi. - V
api, vytvořteposts.jssoubor vapiadresář. - Naplňte
posts.jss následujícím kódem:
import posts from "./post/data";
export function onRequestGet() {
return Response.json(posts);
}Tento kód načítá data blogu (z data.js, který vytvoříte v kroku 8) a vrátí jej jako odpověď JSON z cesty /api/posts.
- V
apiadresáři vytvořte adresář s názvempost. - V
postadresáři vytvořtedata.js. - Naplňte
data.jss následujícím kódem. Právě zde se nachází obsah blogu, jeho název a další informace o blogu.
const posts = [
{
id: 1,
title: "My first blog post",
text: "Hello world! This is my first blog post on my new Cloudflare Workers + Pages blog.",
published_at: new Date("2020-10-23"),
},
{
id: 2,
title: "Updating my blog",
text: "It's my second blog post! I'm still writing and publishing using Cloudflare Workers + Pages :)",
published_at: new Date("2020-10-26"),
},
];
export default posts;- V
postadresáři vytvořte[[id]].js. - Naplňte
[[id]].jss následujícím kódem:
import posts from "./data";
export function onRequestGet(context) {
const id = context.params.id;
if (!id) {
return new Response("Not found", { status: 404 });
}
const post = posts.find((post) => post.id === Number(id));
if (!post) {
return new Response("Not found", { status: 404 });
}
return Response.json(post);
}[[id]].js je dynamická trasa která slouží k přijetí příspěvku na blogu id.
3. Nasaďte
Jakmile nakonfigurujete aplikaci Pages a Pages Function, nasaďte projekt pomocí Wrangler nebo přes dashboard.
Nasaďte pomocí Wrangler
Ve vašem blog-frontend adresáři spusťte wrangler pages deploy a nasaďte projekt do dashboardu Cloudflare.
wrangler pages deploy blog-frontendNasadit přes dashboard
Chcete-li nasazovat přes Cloudflare dashboard, musíte pro svůj projekt Pages vytvořit nový repozitář Git a připojit jej ke Cloudflare. Tento návod používá jako poskytovatele Git službu GitHub.
Vytvořte nový repozitář
Vytvořte nový repozitář GitHub na repo.new ↗. Po vytvoření nového repozitáře v terminálu spusťte následující příkazy, kterými připravíte a odešlete svou místní aplikaci na GitHub:
git init
git remote add origin https://github.com/<YOUR-GH-USERNAME>/<REPOSITORY-NAME>
git add .
git commit -m "Initial commit"
git branch -M main
git push -u origin mainNasadit pomocí Cloudflare Pages
Nasaďte svou aplikaci na Pages:
-
V dashboardu Cloudflare přejděte na Workers & Pages stránce.
Přejděte na Workers & Pages ↗ -
Vyberte Vytvoření aplikace > Pages > Importujte existující repozitář Git.
-
Vyberte nově vytvořený repozitář GitHub a v Nastavení sestavení a nasazení sekci uveďte následující informace:
| Konfigurační možnost | Hodnota |
|---|---|
| Produkční větev | main |
| Příkaz sestavení | npm run build |
| Adresář sestavení | build |
Po nakonfigurování webu spusťte první nasazení. Měli byste vidět, jak Cloudflare Pages instaluje blog-frontend, závislosti projektu a sestavuje web.
Dokončením tohoto tutoriálu jste vytvořili full-stack aplikaci Pages.
Související zdroje
- Přečtěte si o Směrování v Pages Functions