Skip to main content

Custom Database Connection

Orion’s database structure is designed to make database connections modular and consistent across the application. To add a new database connection, you need to create a class that extends DatabaseInterface, which ensures that your custom database connection follows a standardized pattern.

In this example, we’ll walk through creating a PostgreSQL connection class using the popular pg package.

Steps to Add a Custom Database

1. Install the pg Package

First, install the pg package to enable PostgreSQL support:

>>> npm install pg

2. Create a Database Connection File

Next, create a new database connection file in the src/config folder. For example, PostgresConfig.js.

3. Extend DatabaseInterface

Extend the DatabaseInterface class to ensure that your connection class follows a consistent pattern. The DatabaseInterface enforces the singleton pattern, meaning only one instance of the database connection will be created throughout the application.

4. Define Connection Logic

Inside the connect, getClient & close methods, add the logic to handle appropriate functions.

Here’s how to set up a PostgresConfig file:

// src/config/PostgresConfig.js
const { Client } = require('pg');
const DatabaseInterface = require('../interfaces/IDatabase');
const Logger = require('../utils/Logger');

class PostgresConfig extends DatabaseInterface {
constructor() {
super(); // Don't forget to call the super constructor.
this.client = null;
}

async connect() {
try {
this.client = new Client({
host: process.env.POSTGRES_HOST,
user: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DB,
port: process.env.POSTGRES_PORT,
});
await this.client.connect();
Logger.success('Connection successful: PostgreSQL');
} catch (error) {
Logger.error('PostgreSQL connection failed!');
throw error;
}
}

getClient() {
if (!this.client) {
throw new Error(
'PostgreSQL client not initialized. Call connect() first.'
);
}
return this.client;
}

async close() {
if (this.client) {
await this.client.end();
Logger.info('PostgreSQL connection closed.');
}
}
}

module.exports = new PostgresConfig();

5. Configure Environment Variables

To keep credentials secure and configurable, add PostgreSQL details to your .env file:

POSTGRES_HOST     =
POSTGRES_USER =
POSTGRES_PASSWORD =
POSTGRES_DB =
POSTGRES_PORT =

Since Orion automatically loads files from the src/config directory, simply placing PostgresConfig.js in this directory will make it available throughout the application. Orion will recognize this file as a database connection and load it dynamically.

6. Use it anywhere

That's it! You are now ready to your new database client. Here's how:

// Import the Object of the database and call the getClient as well.
const postgresClient = require('../config/PostgresConfig').getClient();

async function getUsers() {
try {
// Use it how you like!
const res = await postgresClient.query('SELECT * FROM users');
return res.rows;
} catch (error) {
throw new Error('Error fetching users: ' + error.message);
}
}