مدیریت خطاها، forbidden.js و instrumentation.js در Next.js — بازیابی با ظرافت و نظارت هوشمند

Next.js ابزارهایی قدرتمند برای مدیریت خطاها، کنترل دسترسی، و مشاهده‌پذیری ارائه می‌دهد. این مقاله نحوهٔ استفاده از error.js برای نمایش fallback UI، استفاده از forbidden.js برای نمایش صفحه 403، و استفاده از instrumentation.js برای ردیابی خطاها و عملکرد سرور را آموزش می‌دهد.

error.jsforbidden.jsinstrumentation.jsError Boundary

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۷ آبان ۱۴۰۴

۱. error.js — مدیریت خطاهای زمان اجرا


فایل error.js به‌عنوان Error Boundary عمل می‌کند و هنگام بروز خطا در یک segment، UI جایگزین نمایش می‌دهد.

'use client'

export default function Error({ error, reset }) {
  useEffect(() => {
    console.error(error)
  }, [error])

  return (
    <div>
      <h2>Something went wrong!</h2>
      <button onClick={() => reset()}>Try again</button>
    </div>
  )
}

ویژگی‌ها:

  • error.message: پیام خطا برای دیباگ
  • error.digest: شناسه هش برای تطبیق با لاگ‌های سرور
  • reset(): تلاش برای رندر مجدد segment

۲. global-error.jsx — مدیریت خطای سراسری


برای مدیریت خطا در سطح root layout، از فایل global-error.tsx استفاده کنید. این فایل باید شامل تگ‌های html و body باشد.

'use client'

export default function GlobalError({ error, reset }) {
  return (
    <html>
      <body>
        <h2>Something went wrong!</h2>
        <button onClick={() => reset()}>Try again</button>
      </body>
    </html>
  )
}

۳. GracefullyDegradingErrorBoundary — بازیابی ظریف


این کامپوننت HTML فعلی را قبل از خطا ذخیره کرده و در صورت بروز خطا، آن را بدون hydration نمایش می‌دهد.

if (this.state.hasError) {
  return (
    <>
      <div dangerouslySetInnerHTML={{ __html: cachedHTML }} />
      <div className="notification">An error occurred</div>
    </>
  )
}

۴. forbidden.js — نمایش صفحه 403


فایل forbidden.js برای نمایش UI هنگام فراخوانی تابع forbidden() در فرآیند احراز هویت استفاده می‌شود.

export default function Forbidden() {
  return (
    <div>
      <h2>Forbidden</h2>
      <p>You are not authorized to access this resource.</p>
      <Link href="/">Return Home</Link>
    </div>
  )
}

۵. instrumentation.js — مشاهده‌پذیری و ردیابی خطاها


فایل instrumentation.ts برای ثبت عملکرد سرور و گزارش خطاها استفاده می‌شود.

export function register() {
  registerOTel('next-app')
}

export const onRequestError = async (err, request, context) => {
  await fetch('https://.../report-error', {
    method: 'POST',
    body: JSON.stringify({ message: err.message, request, context }),
    headers: { 'Content-Type': 'application/json' },
  })
}

پارامترها:

  • error.digest: شناسه خطا
  • request: اطلاعات مسیر، متد، و headerها
  • context: نوع router، نوع route، منبع render، و دلیل revalidation

۶. تعیین runtime


برای اجرای متفاوت در Node.js یا Edge:

if (process.env.NEXT_RUNTIME === 'edge') {
  return require('./register.edge')
} else {
  return require('./register.node')
}

جمع‌بندی


Next.js با ابزارهایی مانند error.js، forbidden.js و instrumentation.js امکان مدیریت خطا، کنترل دسترسی، و نظارت دقیق را فراهم می‌کند. این ابزارها تجربه کاربری را بهبود می‌بخشند و توسعه‌دهندگان را در ساخت اپلیکیشن‌های مقاوم و قابل اعتماد یاری می‌دهند.


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

مقالات مرتبط

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه