Protap
Protap

Reputation: 19

How can I use two different databases in one single node app?

I have install Hbase client and PostgreSql client install but how to connect two databases in a single node application

import { error } from "console";

const hbase = require('hbase');

export class Db {

    private conn = hbase();
    private config = { host: '0.0.0.0', port: 8080 };
    public client = new hbase.Client(this.config);

    constructor() {
        this.conn = new hbase.Client(this.config);
    }

    public conection() {
        this.conn.table('messages').exists((error: string, succuss: string) => {
            if (!succuss) {
                this.createTable('messages', 'message_data');
            }
        });
    }

    private createTable(TblName: string, CF: string) {
        this.conn.table(TblName).create(CF, function (error: string, success: string) {
            console.log(success);
            return success
        });
    }

}

Upvotes: 1

Views: 375

Answers (1)

arpanexe
arpanexe

Reputation: 60

I would suggest creating two different classes for Hbase and PostgreSql. ANd use them in your application whenever needed.

Another thing also use dependency injection in the constructor instead of defining configs in class. That way you can inject any DB configuration in an instance.

Here's code example

  1. Create Class to manage HBaseDB connection

import { error } from "console";

const hbase = require('hbase');

export class HBaseDB {
    
    //Inject this config object in your class constructor
    //private config = { host: '0.0.0.0', port: 8080 };
    
    //Here we have injected config object 
    constructor(config) {        
        this.conn = new hbase.Client(config);
    }

    public conection() {
        this.conn.table('messages').exists((error: string, succuss: string) => {
            if (!succuss) {
                this.createTable('messages', 'message_data');
            }
        });
    }

    private createTable(TblName: string, CF: string) {
        this.conn.table(TblName).create(CF, function (error: string, success: string) {
            console.log(success);
            return success
        });
    }

}

  1. Create Class to manage PostgreSQL connection

const pg = require('pg');

export class PostgresqlDB {

    constructor(config) {
        //config contains database,username,password etc... configs
        this.pool = new pg.Pool({ config })
        this.conn = undefined
    }

    public async conection() {
        //If connection is already connected, no need to connect again
        //This will save time
        if (this.conn === undefined)
            this.conn = await this.pool.connect()
    }


    public async query(query) {             
        await this.conection()
        const response = await this.conn.query(query)       
        return response
    }

}

Now you can use them in code like

const pgDB = require('./PostgresqlDB')
const hbaseDB = require('./HBaseDB')

const hbaseDBConn = new hbaseDB({ host: '0.0.0.0', port: 8080 })
const pgDBConn = new pgDB({ database: 'test', user:'test',password:'test'})

Note: Above code is for understanding purposes only, You may need to add validations and correct some syntax for actual use

Upvotes: 1

Related Questions