52 lines
1.2 KiB
JavaScript
52 lines
1.2 KiB
JavaScript
const sql = require('mssql');
|
|
|
|
let pool = null;
|
|
|
|
function getConfig() {
|
|
return {
|
|
server: process.env.CLOUD_DB_HOST,
|
|
port: Number(process.env.CLOUD_DB_PORT || 1433),
|
|
database: process.env.CLOUD_DB_NAME,
|
|
user: process.env.CLOUD_DB_USER,
|
|
password: process.env.CLOUD_DB_PASSWORD,
|
|
options: {
|
|
encrypt: String(process.env.CLOUD_DB_SSL || '').toLowerCase() === 'true',
|
|
trustServerCertificate: true,
|
|
},
|
|
pool: {
|
|
max: 6,
|
|
min: 0,
|
|
idleTimeoutMillis: 60000,
|
|
},
|
|
connectionTimeout: 10000,
|
|
requestTimeout: 60000,
|
|
};
|
|
}
|
|
|
|
async function getPool() {
|
|
if (pool?.connected) return pool;
|
|
if (pool) {
|
|
await pool.close().catch(() => {});
|
|
}
|
|
pool = await new sql.ConnectionPool(getConfig()).connect();
|
|
return pool;
|
|
}
|
|
|
|
async function query(sqlText, params = {}) {
|
|
const activePool = await getPool();
|
|
const request = activePool.request();
|
|
Object.entries(params).forEach(([key, value]) => request.input(key, value));
|
|
const result = await request.query(sqlText);
|
|
return result.recordset || [];
|
|
}
|
|
|
|
async function close() {
|
|
if (pool) await pool.close().catch(() => {});
|
|
pool = null;
|
|
}
|
|
|
|
module.exports = {
|
|
query,
|
|
close,
|
|
};
|