enterprise_assest_managemen.../node_api/db/connection.js

62 lines
1.4 KiB
JavaScript

// node_api/db/connection.js
const { Pool } = require('pg');
// Create a singleton pool instance
let pool = null;
const createPool = () => {
if (!pool) {
pool = new Pool({
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 5432,
database: process.env.DB_NAME || 'directus',
user: process.env.DB_USER || 'directus',
password: process.env.DB_PASSWORD || 'directus',
max: 20, // Maximum number of connections in the pool
idleTimeoutMillis: 30000, // Close idle connections after 30 seconds
connectionTimeoutMillis: 2000, // Return error after 2 seconds if no connection available
});
// Handle pool errors
pool.on('error', (err) => {
console.error('Unexpected error on idle client', err);
process.exit(-1);
});
console.log('📊 Database connection pool created');
}
return pool;
};
const getPool = () => {
if (!pool) {
createPool();
}
return pool;
};
const query = async (text, params) => {
const client = await getPool().connect();
try {
const result = await client.query(text, params);
return result;
} finally {
client.release();
}
};
const closePool = async () => {
if (pool) {
await pool.end();
pool = null;
console.log('📊 Database connection pool closed');
}
};
module.exports = {
createPool,
getPool,
query,
closePool
};