Files
Nexus_Mat/lib/db.ts

51 lines
1.4 KiB
TypeScript

import mysql from 'mysql2/promise';
import { SystemConfig } from '../types';
// This is a singleton to reuse the connection pool in a server environment (Next.js)
let pool: mysql.Pool | null = null;
// Default config (fallback)
const DEFAULT_CONFIG = {
host: process.env.DB_HOST || '127.0.0.1',
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || 'password',
database: process.env.DB_NAME || 'nexus_db',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
};
export const getDbConnection = async (configOverride?: SystemConfig) => {
if (pool) return pool;
const config = configOverride ? {
host: configOverride.dbHost,
port: parseInt(configOverride.dbPort),
user: configOverride.dbUser,
password: configOverride.dbPass,
database: configOverride.dbName,
} : DEFAULT_CONFIG;
try {
pool = mysql.createPool({
...config,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
return pool;
} catch (error) {
console.error('[MYSQL] Failed to initialize pool:', error);
throw error;
}
};
export const query = async (sql: string, params: any[]) => {
const db = await getDbConnection();
const [results] = await db.execute(sql, params);
return results;
};