// 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 };