مدیریت خطاها در Node.js

برنامه‌های نوشته‌شده با Node.js در طول اجرا با انواع مختلف خطاها مواجه می‌شوند؛ از خطاهای استاندارد جاوااسکریپت گرفته تا خطاهای سیستم‌عامل و خطاهای تعریف‌شده توسط کاربر. Node.js مکانیزم‌های مختلفی برای انتشار و مدیریت این خطاها ارائه می‌دهد. شناخت این مکانیزم‌ها برای نوشتن برنامه‌های پایدار و مقاوم ضروری است.

Standard JavaScript ErrorsSystem ErrorsAssertionErrorError propagationEventEmitter error events

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

1. دسته‌بندی خطاها


  • خطاهای استاندارد جاوااسکریپت: مانند SyntaxError، ReferenceError، TypeError.
  • DOMException: خطاهای استاندارد مرورگر.
  • خطاهای سیستم: ناشی از محدودیت‌های سیستم‌عامل (مثلاً تلاش برای باز کردن فایل غیر موجود).
  • AssertionError: خطاهای منطقی غیرمنتظره که توسط ماژول assert ایجاد می‌شوند.
  • خطاهای تعریف‌شده توسط کاربر: خطاهایی که در کد برنامه ایجاد می‌شوند.

2. انتشار و مدیریت خطاها


نحوهٔ انتشار خطاها به نوع API بستگی دارد:


  • APIهای همزمان: خطاها را با throw منتشر می‌کنند و باید با try...catch مدیریت شوند.
  • APIهای غیرهمزمان مبتنی بر Promise: خطاها با reject منتشر می‌شوند و باید با catch مدیریت شوند.
  • APIهای غیرهمزمان مبتنی بر Callback: خطاها به‌عنوان آرگومان اول Callback ارسال می‌شوند.
  • EventEmitterها: خطاها از طریق رویداد 'error' منتشر می‌شوند.

3. نمونه‌ها


// همزمان
try {
  const m = 1;
  const n = m + z; // ReferenceError
} catch (err) {
  console.error(err);
}

// غیرهمزمان با Promise
const fs = require('node:fs/promises');
(async () => {
  try {
    await fs.readFile('file.txt');
  } catch (err) {
    console.error('Error reading file!', err);
  }
})();

// غیرهمزمان با Callback
const fs = require('node:fs');
fs.readFile('file.txt', (err, data) => {
  if (err) {
    console.error('Error reading file!', err);
    return;
  }
});

4. ویژگی‌های کلاس Error


  • error.message: توضیح متنی خطا.
  • error.code: کد خطا برای شناسایی پایدار.
  • error.stack: مسیر اجرای کد هنگام ایجاد خطا.
  • error.cause: علت اصلی خطا (از نسخه 16.9.0).

5. انواع خطاهای مهم


  • AssertionError: شکست در اعتبارسنجی منطقی.
  • RangeError: آرگومان خارج از محدودهٔ معتبر.
  • ReferenceError: دسترسی به متغیر تعریف‌نشده.
  • SyntaxError: کد نامعتبر جاوااسکریپت.
  • SystemError: خطاهای ناشی از محدودیت‌های سیستم‌عامل.

نتیجه‌گیری


مدیریت صحیح خطاها در Node.js برای ساخت برنامه‌های پایدار و مقاوم حیاتی است. توسعه‌دهندگان باید با انواع خطاها و مکانیزم‌های انتشار آن‌ها آشنا باشند و از ابزارهایی مانند try...catch، Promise.catch، و رویداد 'error' در EventEmitterها برای مدیریت مناسب استفاده کنند.


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