-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdb-connection.js
More file actions
89 lines (81 loc) · 2.24 KB
/
Copy pathdb-connection.js
File metadata and controls
89 lines (81 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
* MySQL Database Connection Module
*
* This module creates a connection pool to your MySQL database.
* Connection pools are preferred over single connections for better performance.
*/
const mysql = require('mysql2/promise');
require('dotenv').config();
// Create connection pool
const pool = mysql.createPool({
host: process.env.DB_HOST || '127.0.0.1',
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || '',
database: process.env.DB_NAME || 'hr_management_system',
port: process.env.DB_PORT || 3306,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
enableKeepAlive: true,
keepAliveInitialDelay: 0
});
/**
* Test database connection
*/
async function testConnection() {
try {
const connection = await pool.getConnection();
console.log('✅ Database connected successfully!');
connection.release();
return true;
} catch (error) {
console.error('❌ Database connection failed:', error.message);
return false;
}
}
/**
* Execute a query with parameters (prevents SQL injection)
* @param {string} query - SQL query string
* @param {Array} params - Query parameters
* @returns {Promise} Query results
*/
async function query(sql, params) {
try {
const [rows] = await pool.execute(sql, params || []);
return rows;
} catch (error) {
console.error('Database query error:', error);
throw error;
}
}
/**
* Execute a stored procedure
* @param {string} procedureName - Name of the stored procedure
* @param {Array} params - Procedure parameters
* @returns {Promise} Procedure results
*/
async function callProcedure(procedureName, params = []) {
try {
const placeholders = params.map(() => '?').join(',');
const sql = `CALL ${procedureName}(${placeholders})`;
const [rows] = await pool.execute(sql, params);
return rows[0]; // Stored procedures return results in first array element
} catch (error) {
console.error('Stored procedure error:', error);
throw error;
}
}
/**
* Get a single connection from the pool (for transactions)
* @returns {Promise} Connection object
*/
async function getConnection() {
return await pool.getConnection();
}
module.exports = {
pool,
query,
callProcedure,
getConnection,
testConnection
};