پیش‌نمایش محتوای پیش‌نویس در Next.js – فعال‌سازی Draft Mode و اتصال امن به CMS

Draft Mode در Next.js امکان مشاهدهٔ محتوای پیش‌نویس از CMS را بدون نیاز به build مجدد فراهم می‌کند. این مقاله مراحل فعال‌سازی Draft Mode، اتصال امن از CMS، اعتبارسنجی توکن و slug، و نحوهٔ نمایش محتوای پیش‌نویس در صفحات را بررسی می‌کند.

Draft ModePreview contentHeadless CMSNext.js API routes

~2 min read · Updated Oct 27, 2025

مقدمه


Draft Mode در Next.js به شما اجازه می‌دهد محتوای پیش‌نویس را از CMS بدون build مجدد سایت مشاهده کنید. این قابلیت برای صفحاتی که به‌صورت استاتیک در زمان build تولید می‌شوند بسیار مفید است.


مرحله ۱: ایجاد Route Handler


در مسیر app/api/draft/route.ts یک Route Handler بسازید:

import { draftMode } from 'next/headers'

export async function GET(request: Request) {
  const draft = await draftMode()
  draft.enable()
  return new Response('Draft mode is enabled')
}

با فراخوانی این مسیر، کوکی __prerender_bypass تنظیم می‌شود و صفحات استاتیک به‌صورت پویا رندر می‌شوند.


مرحله ۲: اتصال امن از CMS


برای اتصال امن CMS به Draft Mode:

  1. یک توکن مخفی تولید کنید
  2. در CMS آدرس پیش‌نمایش را تنظیم کنید:
https://your-site.com/api/draft?secret=YOUR_TOKEN&slug=/posts/one

در Route Handler، توکن و slug را اعتبارسنجی کنید و سپس به مسیر مربوطه ریدایرکت شوید:

import { draftMode } from 'next/headers'
import { redirect } from 'next/navigation'

export async function GET(request: Request) {
  const { searchParams } = new URL(request.url)
  const secret = searchParams.get('secret')
  const slug = searchParams.get('slug')

  if (secret !== 'MY_SECRET_TOKEN' || !slug) {
    return new Response('Invalid token', { status: 401 })
  }

  const post = await getPostBySlug(slug)
  if (!post) {
    return new Response('Invalid slug', { status: 401 })
  }

  const draft = await draftMode()
  draft.enable()

  redirect(post.slug)
}

مرحله ۳: نمایش محتوای پیش‌نویس


در صفحهٔ مربوطه، بررسی کنید که آیا Draft Mode فعال است یا خیر:

import { draftMode } from 'next/headers'

async function getData() {
  const { isEnabled } = await draftMode()

  const url = isEnabled
    ? 'https://draft.example.com'
    : 'https://production.example.com'

  const res = await fetch(url)
  return res.json()
}

export default async function Page() {
  const { title, desc } = await getData()

  return (
    <main>
      <h1>{title}</h1>
      <p>{desc}</p>
    </main>
  )
}

اگر کوکی فعال باشد، داده‌ها به‌صورت پویا دریافت می‌شوند و محتوای پیش‌نویس نمایش داده می‌شود.


جمع‌بندی


با استفاده از Draft Mode در Next.js می‌توانید محتوای پیش‌نویس را از CMS مشاهده کنید بدون اینکه نیاز به build مجدد داشته باشید. این روش با اعتبارسنجی توکن و slug، و ریدایرکت امن به مسیر موردنظر، تجربهٔ پیش‌نمایش حرفه‌ای و امنی را فراهم می‌کند.


Written & researched by Dr. Shahin Siami

Related Articles

مسیریابی پیشرفته و هوک‌های عملکرد در Next.js — راهنمای توسعه‌دهنده برای App Router

Next.js مجموعه‌ای غنی از هوک‌های کلاینت و ابزارهای کش و ناوبری را در اختیار توسعه‌دهندگان قرار می‌دهد. از خواندن پارامترهای مسیر تا گزارش Web Vitals و مدیریت کش، این مقاله مهم‌ترین ابزارهای App Router را با مثال‌های کاربردی معرفی می‌کند.

Continue

مدیریت احراز هویت و کش در Next.js — راهنمای توسعه‌دهنده برای امنیت و عملکرد پویا

Next.js با معرفی قابلیت‌های آزمایشی جدید، امکان کنترل دقیق‌تر دسترسی و کش داده‌ها را فراهم کرده است. تابع unauthorized برای مدیریت خطای 401 و هدایت کاربران به صفحه ورود، unstable_cache برای کش هوشمند عملیات سنگین، updateTag برای بازسازی آنی داده‌ها، و useLinkStatus برای نمایش وضعیت ناوبری استفاده می‌شوند. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات مهم بررسی می‌کند.

Continue

redirect و refresh در Next.js — ریدایرکت‌های هوشمند و تازه‌سازی مسیر در Server Actions

تابع redirect در Next.js برای هدایت کاربر به مسیر جدید استفاده می‌شود و بسته به نوع استفاده، پاسخ HTTP با وضعیت 307 یا 303 ارسال می‌کند. این تابع در Server Components، Client Components، Route Handlers و Server Actions قابل استفاده است. تابع refresh نیز برای تازه‌سازی مسیر کلاینت از درون Server Action استفاده می‌شود. این مقاله نحوه استفاده از هر دو تابع را با مثال‌های کاربردی و نکات مهم توضیح می‌دهد.

Continue

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Continue

headers، ImageResponse، notFound و permanentRedirect در Next.js — مدیریت درخواست‌ها، تولید تصویر، خطا و ریدایرکت

Next.js ابزارهای قدرتمندی برای مدیریت درخواست‌ها و پاسخ‌ها در کامپوننت‌های سروری فراهم کرده است. تابع headers برای خواندن هدرهای HTTP ورودی، ImageResponse برای تولید تصاویر داینامیک، notFound برای نمایش صفحه خطای 404، و permanentRedirect برای ریدایرکت دائمی کاربران استفاده می‌شوند. این مقاله نحوه استفاده از هر یک را با مثال‌های کاربردی توضیح می‌دهد.

Continue

راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

Continue