Error Handling in Node.js

Applications running in Node.js encounter different categories of errors: standard JavaScript errors, DOMExceptions, system errors, assertion errors, and user-defined errors. Node.js provides multiple mechanisms for propagating and handling these errors depending on whether the API is synchronous, asynchronous with callbacks, or asynchronous with Promises. Understanding these mechanisms is essential for building resilient applications.

Standard JavaScript ErrorsSystem ErrorsAssertionErrorError propagationEventEmitter error events

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

1. Categories of Errors


  • Standard JavaScript Errors: SyntaxError, ReferenceError, TypeError, etc.
  • DOMExceptions: Standard browser exceptions.
  • System Errors: Triggered by OS constraints (e.g., opening a non-existent file).
  • AssertionError: Raised by the assert module when logic violations occur.
  • User-defined Errors: Errors explicitly thrown in application code.

2. Error Propagation and Handling


Error handling depends on the API style:


  • Synchronous APIs: Use throw and must be handled with try...catch.
  • Promise-based APIs: Errors are reported via reject and handled with catch.
  • Callback-based APIs: Errors are passed as the first argument to the callback.
  • EventEmitter APIs: Errors are emitted via the 'error' event.

3. Examples


// Synchronous
try {
  const m = 1;
  const n = m + z; // ReferenceError
} catch (err) {
  console.error(err);
}

// Asynchronous with Promise
const fs = require('node:fs/promises');
(async () => {
  try {
    await fs.readFile('file.txt');
  } catch (err) {
    console.error('Error reading file!', err);
  }
})();

// Asynchronous with Callback
const fs = require('node:fs');
fs.readFile('file.txt', (err, data) => {
  if (err) {
    console.error('Error reading file!', err);
    return;
  }
});

4. Error Class Properties


  • error.message: Text description of the error.
  • error.code: Stable identifier for the error type.
  • error.stack: Stack trace showing where the error was created.
  • error.cause: Underlying cause of the error (since v16.9.0).

5. Important Error Types


  • AssertionError: Indicates assertion failure.
  • RangeError: Argument outside valid range.
  • ReferenceError: Accessing an undefined variable.
  • SyntaxError: Invalid JavaScript code.
  • SystemError: Errors caused by OS-level constraints.

Conclusion


Proper error handling in Node.js is critical for building stable applications. Developers must understand the different error categories and propagation mechanisms, and use tools like try...catch, Promise.catch, and 'error' events in EventEmitters to handle errors effectively.


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

مقالات مرتبط

آشنایی کامل با ماژول Cluster در Node.js و نحوه افزایش مقیاس‌پذیری سرور

ماژول Cluster در Node.js به توسعه‌دهندگان اجازه می‌دهد چندین پردازش همزمان ایجاد کنند که یک پورت سرور را به اشتراک می‌گذارند. این کار باعث استفاده بهتر از هسته‌های CPU و افزایش توان پردازش برنامه می‌شود. در این مقاله نحوه کار Cluster، مدیریت Workerها، تنظیمات مهم و مثال عملی را بررسی می‌کنیم.

ادامه

راهنمای جامع ماژول VM در Node.js (ماژول node:vm)

ماژول node:vm امکان کامپایل و اجرای کد جاوااسکریپت در کانتکست‌های ایزولهٔ V8 را فراهم می‌کند. این کانتکست‌ها مانند یک «سندباکس سبک» داخل برنامهٔ Node.js عمل می‌کنند و هرکدام globalThis مخصوص خود را دارند. این ماژول برای اجرای پویا، موتورهای قالب (Template Engines)، سیستم‌های افزونه (Plugin Systems)، REPLها و تست ایزولهٔ منطق بسیار مناسب است. اما نکتهٔ بسیار مهم: vm یک ابزار امنیتی نیست و نباید برای اجرای کدهای غیرقابل‌اعتماد استفاده شود.

ادامه

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

ادامه

راهنمای جامع Worker Threads در Node.js (ماژول node:worker_threads)

ماژول node:worker_threads امکان اجرای واقعی چندریسمانی (Multithreading) را در Node.js فراهم می‌کند. برخلاف مدل تک‌ریسمانی سنتی Node.js، Worker Threads اجازه می‌دهند کارهای سنگین CPU در ریسه‌های جداگانه اجرا شوند بدون اینکه حلقهٔ رویداد (Event Loop) مسدود شود. این ماژول از حافظهٔ اشتراکی، انتقال بدون کپی (Zero‑Copy)، کانال‌های پیام، Worker Pool، محدودیت منابع و ابزارهای همگام‌سازی پیشرفته پشتیبانی می‌کند. Worker Threads برای پردازش‌های محاسباتی سنگین ایده‌آل هستند، در حالی که I/O همچنان باید توسط ریسهٔ اصلی مدیریت شود.

ادامه

راهنمای جامع ماژول util در Node.js

ماژول node:util مجموعه‌ای از توابع کمکی قدرتمند برای استفاده در هستهٔ Node.js و همچنین توسعهٔ برنامه‌ها ارائه می‌دهد. این ماژول ابزارهایی برای دیباگ، بازرسی اشیا، تبدیل Callback ↔ Promise، قالب‌بندی رشته‌ها، بررسی انواع، مدیریت خطاها، رمزگذاری متن، پردازش MIME، پارس آرگومان‌های CLI، سیگنال‌های Abort، و ابزارهای متفرقه فراهم می‌کند. این ماژول یکی از جعبه‌ابزارهای اصلی و ضروری برای توسعه‌دهندگان Node.js است.

ادامه

راهنمای جامع ماژول URL در Node.js

ماژول node:url ابزارهایی برای تحلیل، ساخت، و دست‌کاری URLها در Node.js فراهم می‌کند. Node.js دو API برای کار با URL دارد: WHATWG URL API — استاندارد مدرن و سازگار با مرورگرها (توصیه‌شده). Legacy API — API قدیمی Node.js (غیرتوصیه‌شده). WHATWG URL API یک رابط تمیز، سازگار و قدرتمند برای کار با اجزای URL، پارامترهای query، الگوهای URL و حتی Blob URLها ارائه می‌دهد.

ادامه