Custom Errors

Create and use custom error classes

IntermediateTopic: Error Handling
Back

JavaScript Custom Errors Program

This program helps you to learn the fundamental structure and syntax of JavaScript programming.

Try This Code
// Method 1: Custom error class
class CustomError extends Error {
    constructor(message, code) {
        super(message);
        this.name = 'CustomError';
        this.code = code;
    }
}

try {
    throw new CustomError('Something went wrong', 'ERR001');
} catch (error) {
    console.error('Custom error:', error.message);
    console.error('Error code:', error.code);
}

// Method 2: Multiple custom errors
class ValidationError extends Error {
    constructor(message, field) {
        super(message);
        this.name = 'ValidationError';
        this.field = field;
    }
}

class NotFoundError extends Error {
    constructor(resource) {
        super(`${resource} not found`);
        this.name = 'NotFoundError';
        this.resource = resource;
    }
}

try {
    throw new ValidationError('Invalid email', 'email');
} catch (error) {
    if (error instanceof ValidationError) {
        console.error('Validation error:', error.message, 'Field:', error.field);
    }
}

// Method 3: Error factory
function createError(type, message, details = {}) {
    const error = new Error(message);
    error.name = type;
    Object.assign(error, details);
    return error;
}

try {
    throw createError('DatabaseError', 'Connection failed', { host: 'localhost', port: 5432 });
} catch (error) {
    console.error('Error:', error.name, error.message, error.host);
}

// Method 4: Error with stack trace
class DetailedError extends Error {
    constructor(message, context = {}) {
        super(message);
        this.name = 'DetailedError';
        this.context = context;
        this.timestamp = new Date().toISOString();
    }
    
    toJSON() {
        return {
            name: this.name,
            message: this.message,
            context: this.context,
            timestamp: this.timestamp,
            stack: this.stack
        };
    }
}

const error = new DetailedError('Operation failed', { userId: 123, action: 'update' });
console.log('Error JSON:', JSON.stringify(error, null, 2));
Output
Custom error: Something went wrong
Error code: ERR001
Validation error: Invalid email Field: email
Error: DatabaseError Connection failed localhost
Error JSON: {
  "name": "DetailedError",
  "message": "Operation failed",
  "context": { "userId": 123, "action": "update" },
  "timestamp": "2024-01-15T10:30:45.123Z",
  "stack": "..."
}

Understanding Custom Errors

Custom errors provide specific error types.

Custom Error Class

Extend Error
Add custom properties
Set error name
Include context

Error Types

ValidationError
NotFoundError
DatabaseError
Custom types

Error Factory

Create errors dynamically
Add context
Consistent format

Error Serialization

toJSON method
Include stack trace
Add metadata

Best Practices

Use specific error types
Include context
Add helpful messages
Serialize properly

Let us now understand every line and the components of the above program.

Note: To write and run JavaScript programs, you need to set up the local environment on your computer. Refer to the complete article Setting up JavaScript Development Environment. If you do not want to set up the local environment on your computer, you can also use online IDE to write and run your JavaScript programs.

Table of Contents