draftMode، fetch و forbidden در Next.js — مدیریت حالت پیش‌نویس، کش داده‌ها و کنترل دسترسی

تابع draftMode در Next.js امکان فعال‌سازی یا غیرفعال‌سازی حالت پیش‌نویس را فراهم می‌کند و می‌توان بررسی کرد که آیا این حالت فعال است یا نه. API fetch در Next.js با تنظیمات cache، revalidate و tags برای کنترل دقیق کش داده‌ها گسترش یافته است. همچنین تابع forbidden برای نمایش خطای 403 در صورت عدم مجوز دسترسی استفاده می‌شود. این مقاله نحوه استفاده از هر سه قابلیت را با مثال‌های کاربردی توضیح می‌دهد.

revalidateforbiddendraftMode

~2 دقیقه مطالعه • بروزرسانی ۹ آبان ۱۴۰۴

۱. draftMode چیست؟


draftMode() تابعی async در Next.js است که امکان فعال‌سازی، غیرفعال‌سازی و بررسی وضعیت حالت پیش‌نویس را فراهم می‌کند. این حالت برای نمایش محتوای داینامیک در زمان توسعه یا پیش‌نمایش مفید است.


فعال‌سازی:

// app/draft/route.ts
import { draftMode } from 'next/headers'

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

غیرفعال‌سازی:

// app/draft/route.ts
import { draftMode } from 'next/headers'

export async function GET() {
  const draft = await draftMode()
  draft.disable()
  return new Response('Draft mode is disabled')
}

بررسی وضعیت:

// app/page.ts
const { isEnabled } = await draftMode()
return <p>Draft Mode is {isEnabled ? 'Enabled' : 'Disabled'}</p>

۲. fetch با تنظیمات کش


تابع fetch() در Next.js گسترش یافته تا بتوانید کش داده‌ها را با گزینه‌های زیر کنترل کنید:


گزینه cache:

  • 'auto': رفتار پیش‌فرض
  • 'no-store': بدون کش
  • 'force-cache': استفاده از کش در صورت موجود بودن

گزینه revalidate:

  • false: کش دائمی
  • 0: بدون کش
  • عدد: مدت اعتبار کش بر حسب ثانیه

گزینه tags:

برای تعیین تگ‌های کش و استفاده از revalidateTag در آینده:

fetch('https://...', {
  next: { tags: ['collection'] }
})

۳. تابع forbidden برای کنترل دسترسی


forbidden() تابعی است که خطای 403 را در صورت عدم مجوز دسترسی نمایش می‌دهد. این تابع در Server Components، Server Actions و Route Handlers قابل استفاده است.


مثال در صفحه مدیریت:

// app/admin/page.tsx
import { verifySession } from '@/app/lib/dal'
import { forbidden } from 'next/navigation'

export default async function AdminPage() {
  const session = await verifySession()
  if (session.role !== 'admin') {
    forbidden()
  }
  return <main>Welcome, {session.user.name}!</main>
}

مثال در Server Action:

// app/actions/update-role.ts
'use server'
import { verifySession } from '@/app/lib/dal'
import { forbidden } from 'next/navigation'

export async function updateRole(formData) {
  const session = await verifySession()
  if (session.role !== 'admin') {
    forbidden()
  }
  // ادامه عملیات...
}

جمع‌بندی


با استفاده از draftMode می‌توانید حالت پیش‌نویس را مدیریت کنید، با fetch کش داده‌ها را کنترل کنید، و با forbidden دسترسی کاربران را محدود نمایید. این قابلیت‌ها به شما امکان می‌دهند تجربه‌ای امن، سریع و قابل شخصی‌سازی در Next.js بسازید.


نوشته و پژوهش شده توسط دکتر شاهین صیامی

draftMode، fetch و forbidden در Next.js — مدیریت حالت پیش‌نویس، کش داده‌ها و کنترل دسترسی | دکتر شاهین صیامی