62 lines
1.4 KiB
JavaScript
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
|
|
}; |