מדריך קלאודפלייר בעברית

תיעוד 240

בנו API לחזית באמצעות Pages Functions

עודכן לאחרונה ב-21 באפריל 2026

במדריך זה תבנו יישום Pages מסוג full-stack. היישום שלכם יכיל:

  • חזית, שנבנית באמצעות Cloudflare Pages ו-מסגרת React.
  • API בפורמט JSON, שנבנה עם Pages Functions, ומחזיר פוסטים בבלוג שאפשר לאחזר ולהציג בחזית.

אם אתם מעדיפים לעבוד עם headless CMS במקום API כדי להציג את תוכן הבלוג, עיינו ב-מדריך headless CMS.

#מדריך וידאו

#1. בנו את החזית

כדי להתחיל, צרו יישום Pages חדש באמצעות מסגרת React.

#צרו פרויקט React חדש

בטרמינל, צרו פרויקט React חדש בשם blog-frontend באמצעות הפקודה create-vite. היכנסו לתיקייה blog-frontend שנוצרה והפעילו שרת פיתוח מקומי:

npx create-vite -t react blog-frontend
cd blog-frontend
npm install
npm run dev

#הגדירו את פרויקט React

כדי להגדיר את פרויקט React:

  1. התקינו את React Router ↗︎ בשורש התיקייה blog-frontend.

npm:

npm i react-router-dom@6

yarn:

yarn add react-router-dom@6

pnpm:

pnpm add react-router-dom@6

bun:

bun add react-router-dom@6
  1. נקו את התוכן של src/App.js. העתיקו והדביקו את הקוד הבא כדי לייבא את React Router אל App.js, ולהגדיר נתב חדש עם שני נתיבים:
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;
  1. בתיקייה src, צרו תיקייה חדשה בשם components.
  2. בתיקייה components, צרו שני קבצים: posts.js ו-post.js. הקבצים האלה יטענו את הפוסטים בבלוג מה-API שלכם, ויציגו אותם.
  3. מלאו את posts.js בקוד הבא:
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;
  1. מלאו את post.js בקוד הבא:
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. בנו את ה-API

עכשיו תיצרו Pages Functions ששומר את תוכן הבלוג ומאחזר אותו דרך API בפורמט JSON.

#כתבו את Pages Function

כדי ליצור את Pages Function שישמש כ-API בפורמט JSON:

  1. צרו תיקייה functions בתיקייה blog-frontend.
  2. בתוך functions, צרו תיקייה בשם api.
  3. בתוך api, צרו קובץ posts.js בתיקייה api.
  4. מלאו את posts.js בקוד הבא:
import posts from "./post/data";

export function onRequestGet() {
	return Response.json(posts);
}

הקוד הזה מקבל נתוני בלוג (מ-data.js, שתיצרו בשלב 8) ומחזיר אותם כתגובת JSON מהנתיב /api/posts.

  1. בתיקייה api, צרו תיקייה בשם post.
  2. בתיקייה post, צרו קובץ data.js.
  3. מלאו את data.js בקוד הבא. כאן נמצאים תוכן הבלוג, כותרת הבלוג ומידע נוסף על הבלוג.
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;
  1. בתיקייה post, צרו קובץ [[id]].js.
  2. מלאו את [[id]].js בקוד הבא:
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 הוא נתיב דינמי שמשמש לקבלת id של פוסט בבלוג.

#3. פריסה

אחרי שהגדרתם את יישום Pages ואת Pages Function, פרסו את הפרויקט באמצעות Wrangler או דרך לוח הבקרה.

#פריסה עם Wrangler

בתיקייה blog-frontend, הריצו את wrangler pages deploy כדי לפרוס את הפרויקט ללוח הבקרה של Cloudflare.

wrangler pages deploy blog-frontend

#פריסה דרך לוח הבקרה

כדי לפרוס דרך לוח הבקרה של Cloudflare, תצטרכו ליצור מאגר Git חדש לפרויקט Pages ולחבר את מאגר Git ל-Cloudflare. המדריך הזה משתמש ב-GitHub כספק Git.

#צרו מאגר חדש

צרו מאגר GitHub חדש על ידי ביקור ב-repo.new ↗︎. אחרי יצירת מאגר חדש, הכינו ודחפו את היישום המקומי ל-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 main

#פרסו עם Cloudflare Pages

פרסו את היישום ל-Pages:

  1. בלוח הבקרה של Cloudflare, עברו לעמוד Workers & Pages. עברו אל Workers & Pages ↗
  2. בחרו Create application > Pages > Import an existing Git repository.
  3. בחרו את מאגר GitHub החדש שיצרתם, ובמקטע Set up builds and deployments ספקו את המידע הבא:
אפשרות הגדרהערך
Production branchmain
Build commandnpm run build
Build directorybuild

אחרי הגדרת האתר, התחילו את הפריסה הראשונה. אתם אמורים לראות את Cloudflare Pages מתקין את blog-frontend, את התלויות של הפרויקט, ובונה את האתר.

בסיום המדריך הזה, יצרתם יישום Pages מסוג full-stack.

#משאבים קשורים