Bird
Raised Fist0
Node.jsframework~5 mins

Custom error classes in Node.js - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a custom error class in Node.js?
A custom error class is a user-defined class that extends the built-in Error class to create specific error types with custom messages or properties.
Click to reveal answer
beginner
Why should you extend the built-in Error class when creating custom errors?
Extending the built-in Error class ensures your custom error behaves like a standard error, including stack traces and compatibility with error handling mechanisms.
Click to reveal answer
beginner
How do you set a custom error message in a custom error class?
You pass the message to the super() call inside the constructor of your custom error class, which sets the message property on the error instance.
Click to reveal answer
intermediate
What is the purpose of setting the name property in a custom error class?
Setting the name property helps identify the error type when logging or handling errors, making it easier to distinguish between different custom errors.
Click to reveal answer
beginner
Show a simple example of a custom error class in Node.js.
class ValidationError extends Error {
  constructor(message) {
    super(message);
    this.name = 'ValidationError';
  }
}

// Usage:
throw new ValidationError('Invalid input');
Click to reveal answer
What must a custom error class in Node.js extend to behave like a standard error?
AError
BObject
CFunction
DArray
Which method is used to pass the error message in a custom error class constructor?
Asuper(message)
Bthis.message = message
CError(message)
DsetMessage(message)
Why is setting the 'name' property in a custom error class useful?
ATo change the error message
BTo improve performance
CTo fix syntax errors
DTo identify the error type
What will happen if you throw a custom error without extending Error?
AIt behaves exactly like a standard error
BIt won't have a stack trace
CIt will crash Node.js immediately
DIt will automatically extend Error
Which of these is a correct way to throw a custom error?
Athrow Error('ValidationError')
Bthrow ValidationError('Invalid input')
Cthrow new ValidationError('Invalid input')
Dthrow new Error('ValidationError')
Explain how to create and use a custom error class in Node.js.
Think about inheritance and how errors carry messages and names.
You got /5 concepts.
    Why is it important to extend the built-in Error class when making custom errors?
    Consider what makes errors useful when debugging and handling.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main reason to create a custom error class in Node.js?
      easy
      A. To define specific error types for clearer error handling
      B. To make the program run faster
      C. To avoid using try-catch blocks
      D. To replace the built-in Error class completely

      Solution

      1. Step 1: Understand the purpose of custom errors

        Custom error classes help identify and handle specific error cases clearly in your code.
      2. Step 2: Compare with other options

        Custom errors do not speed up code, avoid try-catch, or replace Error class but extend it.
      3. Final Answer:

        To define specific error types for clearer error handling -> Option A
      4. Quick Check:

        Custom error purpose = Specific error types [OK]
      Hint: Custom errors clarify error types, not speed or structure [OK]
      Common Mistakes:
      • Thinking custom errors improve performance
      • Believing custom errors remove need for try-catch
      • Assuming custom errors replace built-in Error
      2. Which of the following is the correct way to define a custom error class named MyError in Node.js?
      easy
      A. class MyError extends Object { constructor(message) { super(message); this.name = 'MyError'; } }
      B. function MyError() { this.message = 'Error'; this.name = 'MyError'; }
      C. class MyError { constructor(message) { this.message = message; } }
      D. class MyError extends Error { constructor(message) { super(message); this.name = 'MyError'; } }

      Solution

      1. Step 1: Check class inheritance

        Custom errors must extend the built-in Error class to behave like errors.
      2. Step 2: Verify constructor and name setting

        The constructor calls super(message) and sets this.name to the class name for clarity.
      3. Final Answer:

        class MyError extends Error { constructor(message) { super(message); this.name = 'MyError'; } } -> Option D
      4. Quick Check:

        Extend Error and set name = MyError [OK]
      Hint: Extend Error and set this.name in constructor [OK]
      Common Mistakes:
      • Not extending Error class
      • Forgetting to call super(message)
      • Not setting the error name property
      3. What will be the output of this code snippet?
      class NotFoundError extends Error {
        constructor(message) {
          super(message);
          this.name = 'NotFoundError';
        }
      }
      
      try {
        throw new NotFoundError('Item not found');
      } catch (e) {
        console.log(e.name + ': ' + e.message);
      }
      medium
      A. Error: Item not found
      B. NotFoundError: Item not found
      C. TypeError: Item not found
      D. undefined: Item not found

      Solution

      1. Step 1: Understand custom error name

        The custom error sets this.name = 'NotFoundError', so e.name is 'NotFoundError'.
      2. Step 2: Check the output format

        The console.log prints e.name + ': ' + e.message, which becomes 'NotFoundError: Item not found'.
      3. Final Answer:

        NotFoundError: Item not found -> Option B
      4. Quick Check:

        Custom error name shows in output [OK]
      Hint: Custom error name property appears in error output [OK]
      Common Mistakes:
      • Assuming default 'Error' name instead of custom
      • Confusing error type with TypeError
      • Missing the custom name property effect
      4. Identify the error in this custom error class definition:
      class ValidationError extends Error {
        constructor(msg) {
          this.message = msg;
          this.name = 'ValidationError';
        }
      }
      medium
      A. Missing call to super() in constructor
      B. Incorrect class name
      C. Should extend Object instead of Error
      D. No error, code is correct

      Solution

      1. Step 1: Check constructor for super call

        When extending Error, constructor must call super() before using this.
      2. Step 2: Identify missing super call

        The code sets this.message and this.name without calling super(msg), causing a runtime error.
      3. Final Answer:

        Missing call to super() in constructor -> Option A
      4. Quick Check:

        Always call super() first in subclass constructor [OK]
      Hint: Always call super() before using this in constructor [OK]
      Common Mistakes:
      • Forgetting super() call causes ReferenceError
      • Setting this.message before super()
      • Extending wrong base class
      5. You want to create a custom error class AuthError that includes a statusCode property for HTTP status codes. Which implementation correctly adds this property and preserves the error behavior?
      hard
      A. class AuthError extends Error { constructor(statusCode) { super(); this.name = 'AuthError'; this.statusCode = statusCode; } }
      B. class AuthError extends Error { constructor(message, statusCode) { this.message = message; this.statusCode = statusCode; this.name = 'AuthError'; } }
      C. class AuthError extends Error { constructor(message, statusCode) { super(message); this.name = 'AuthError'; this.statusCode = statusCode; } }
      D. class AuthError { constructor(message, statusCode) { this.message = message; this.statusCode = statusCode; this.name = 'AuthError'; } }

      Solution

      1. Step 1: Check proper Error extension and constructor

        The class must extend Error and call super(message) to set the error message correctly.
      2. Step 2: Verify additional property and name

        Setting this.statusCode after super() adds the extra info; setting this.name clarifies error type.
      3. Final Answer:

        class AuthError extends Error { constructor(message, statusCode) { super(message); this.name = 'AuthError'; this.statusCode = statusCode; } } -> Option C
      4. Quick Check:

        Extend Error, call super(message), add extra properties [OK]
      Hint: Call super(message) first, then add extra properties [OK]
      Common Mistakes:
      • Not calling super(message) in constructor
      • Not extending Error class
      • Missing message parameter in super call