feat: async/await psql connection

v1.18.x
Barış Soner Uşaklı 4 years ago
parent 672959c13f
commit 33bf1b0e2c

@ -45,32 +45,21 @@ postgresModule.questions = [
}, },
]; ];
postgresModule.init = function (callback) { postgresModule.init = async function () {
callback = callback || function () { };
const Pool = require('pg').Pool; const Pool = require('pg').Pool;
const connOptions = connection.getConnectionOptions(); const connOptions = connection.getConnectionOptions();
const pool = new Pool(connOptions);
const db = new Pool(connOptions); postgresModule.pool = pool;
postgresModule.client = pool;
db.connect(function (err, client, release) { const client = await pool.connect();
if (err) { try {
await checkUpgrade(client);
} catch (err) {
winston.error('NodeBB could not connect to your PostgreSQL database. PostgreSQL returned the following error: ' + err.message); winston.error('NodeBB could not connect to your PostgreSQL database. PostgreSQL returned the following error: ' + err.message);
return callback(err); throw err;
} finally {
client.release();
} }
postgresModule.pool = db;
postgresModule.client = db;
checkUpgrade(client).then(function () {
release();
callback(null);
}, function (err) {
release();
callback(err);
});
});
}; };
@ -300,27 +289,25 @@ PARALLEL SAFE`);
await client.query(`COMMIT`); await client.query(`COMMIT`);
} }
postgresModule.createSessionStore = function (options, callback) { postgresModule.createSessionStore = async function (options) {
var meta = require('../meta'); const meta = require('../meta');
function done(db) { function done(db) {
const sessionStore = require('connect-pg-simple')(session); const sessionStore = require('connect-pg-simple')(session);
const store = new sessionStore({ return new sessionStore({
pool: db, pool: db,
ttl: meta.getSessionTTLSeconds(), ttl: meta.getSessionTTLSeconds(),
pruneSessionInterval: nconf.get('isPrimary') ? 60 : false, pruneSessionInterval: nconf.get('isPrimary') ? 60 : false,
}); });
callback(null, store);
} }
connection.connect(options, function (err, db) { const db = await connection.connect(options);
if (err) {
return callback(err);
}
if (!nconf.get('isPrimary')) { if (!nconf.get('isPrimary')) {
return done(db); return done(db);
} }
db.query(`
await db.query(`
CREATE TABLE IF NOT EXISTS "session" ( CREATE TABLE IF NOT EXISTS "session" (
"sid" CHAR(32) NOT NULL "sid" CHAR(32) NOT NULL
COLLATE "C" COLLATE "C"
@ -333,14 +320,9 @@ CREATE INDEX IF NOT EXISTS "session_expire_idx" ON "session"("expire");
ALTER TABLE "session" ALTER TABLE "session"
ALTER "sid" SET STORAGE MAIN, ALTER "sid" SET STORAGE MAIN,
CLUSTER ON "session_expire_idx";`, function (err) { CLUSTER ON "session_expire_idx";`);
if (err) {
return callback(err);
}
done(db); return done(db);
});
});
}; };
postgresModule.createIndices = function (callback) { postgresModule.createIndices = function (callback) {
@ -378,32 +360,21 @@ postgresModule.checkCompatibilityVersion = function (version, callback) {
callback(); callback();
}; };
postgresModule.info = function (db, callback) { postgresModule.info = async function (db) {
async.waterfall([ if (!db) {
function (next) { db = await connection.connect(nconf.get('postgres'));
if (db) {
setImmediate(next, null, db);
} else {
connection.connect(nconf.get('postgres'), next);
} }
},
function (db, next) {
postgresModule.pool = postgresModule.pool || db; postgresModule.pool = postgresModule.pool || db;
const res = await db.query(`
db.query(`
SELECT true "postgres", SELECT true "postgres",
current_setting('server_version') "version", current_setting('server_version') "version",
EXTRACT(EPOCH FROM NOW() - pg_postmaster_start_time()) * 1000 "uptime"`, next); EXTRACT(EPOCH FROM NOW() - pg_postmaster_start_time()) * 1000 "uptime"`
}, );
function (res, next) { return res.rows[0];
next(null, res.rows[0]);
},
], callback);
}; };
postgresModule.close = function (callback) { postgresModule.close = async function () {
callback = callback || function () {}; await postgresModule.pool.end();
postgresModule.pool.end(callback);
}; };
require('./postgres/main')(postgresModule); require('./postgres/main')(postgresModule);

@ -33,14 +33,12 @@ connection.getConnectionOptions = function (postgres) {
return _.merge(connOptions, postgres.options || {}); return _.merge(connOptions, postgres.options || {});
}; };
connection.connect = function (options, callback) { connection.connect = async function (options) {
const Pool = require('pg').Pool; const Pool = require('pg').Pool;
const connOptions = connection.getConnectionOptions(options); const connOptions = connection.getConnectionOptions(options);
const db = new Pool(connOptions); const db = new Pool(connOptions);
await db.connect();
db.connect(function (err) { return db;
callback(err, db);
});
}; };
require('../../promisify')(connection);

Loading…
Cancel
Save