~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 بسازید.
نوشته و پژوهش شده توسط دکتر شاهین صیامی