NodeBB/NodeBB

View on GitHub
src/database/postgres/connection.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

const nconf = require('nconf');
const winston = require('winston');
const _ = require('lodash');

const connection = module.exports;

connection.getConnectionOptions = function (postgres) {
    postgres = postgres || nconf.get('postgres');
    // Sensible defaults for PostgreSQL, if not set
    if (!postgres.host) {
        postgres.host = '127.0.0.1';
    }
    if (!postgres.port) {
        postgres.port = 5432;
    }
    const dbName = postgres.database;
    if (dbName === undefined || dbName === '') {
        winston.warn('You have no database name, using "nodebb"');
        postgres.database = 'nodebb';
    }

    const connOptions = {
        host: postgres.host,
        port: postgres.port,
        user: postgres.username,
        password: postgres.password,
        database: postgres.database,
        ssl: String(postgres.ssl) === 'true',
        max: 20,
        connectionTimeoutMillis: 90000,
    };

    return _.merge(connOptions, postgres.options || {});
};

connection.connect = async function (options) {
    const { Pool } = require('pg');
    const connOptions = connection.getConnectionOptions(options);
    const db = new Pool(connOptions);
    await db.connect();
    return db;
};

require('../../promisify')(connection);