Question
Provide a practical example where throwing an error in a constructor is essential for system integrity.
Asked by: USER2266
103 Viewed
103 Answers
Answer (103)
Consider a `DatabaseConnection` class where a valid connection string is absolutely critical for its operation. If the connection string is missing or invalid, the class cannot fulfill its purpose, and attempting to use an instance created with bad parameters would inevitably lead to further errors or security vulnerabilities. Throwing an error ensures that no `DatabaseConnection` object is ever created with an invalid state, thereby maintaining the integrity of subsequent database operations.
```javascript
class DatabaseConnection {
constructor(connectionString) {
if (typeof connectionString !== 'string' || connectionString.trim() === '') {
throw new TypeError("DatabaseConnection: 'connectionString' must be a non-empty string.");
}
// In a real scenario, you'd attempt to establish the connection here
// and throw if the connection itself fails, e.g., new ConnectionError(...)
this.connectionString = connectionString;
console.log(`Database connection initialized with: ${this.connectionString.substring(0, 15)}...`);
}
query(sql) {
// Simulate query execution
console.log(`Executing query on ${this.connectionString.substring(0, 15)}...: ${sql}`);
return `Results for: ${sql}`;
}
}
// Scenario 1: Valid connection
try {
const db1 = new DatabaseConnection("mongodb://localhost:27017/my_db");
console.log(db1.query("SELECT * FROM users;"));
} catch (e) {
console.error("Error creating database connection:", e.message);
}
console.log("\n--- Attempting invalid connection ---");
// Scenario 2: Invalid connection string - essential to throw an error
let db2;
try {
db2 = new DatabaseConnection(null); // This will throw a TypeError
console.log(db2.query("INSERT INTO products;")); // This line will not be reached
} catch (e) {
console.error("Error creating database connection:", e.message);
// Log the error, notify admin, or exit process as appropriate for critical failure
}
// db2 will be undefined because the constructor failed, preventing operations on an invalid connection.
if (!db2) {
console.log("Database connection object (db2) was not created due to invalid parameters. Cannot proceed with database operations.");
}
```