-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
74 lines (69 loc) · 1.85 KB
/
index.js
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
/**
* Azure SQL client
*
* Mingyu He 2020-06-18
*/
const { sqlUser, sqlPass, sqlServer, sqlDb, sqlPoolMax, sqlPoolMin, sqlPoolIdleTimeout } = process.env
const log = require('debug')('azuresql')
const sql = require('mssql')
var sqlConfig = {
user: sqlUser,
password: sqlPass,
server: sqlServer,
database: sqlDb,
pool: {
max: +sqlPoolMax || 1,
min: +sqlPoolMin || 0,
idleTimeoutMillis: +sqlPoolIdleTimeout || 30000
},
options: {
encrypt: true,
enableArithAbort: true
}
}
var pool
/**
* Get a Request object from a connection pool that is lazy-initiated
* NOTE: Only when you need to extend and play with other features in mssql package
* @returns {object} Request object
*/
async function getRequest () {
if (!pool) {
pool = new sql.ConnectionPool(sqlConfig)
await pool.connect()
}
return new sql.Request(pool)
}
/**
* Query Azure SQL database
* @param {string} sql - T-SQL
* @param {object} params - rest parameters
* @param {string} param.k - key for prepared statements
* @param {string} param.v - value for prepared statements
* @param {object} [param.type] - {@link https://www.npmjs.com/package/mssql#data-types|SQL data types}, optional in normal cases
* @returns {object} an object like: { recordsets: [[{...}]], recordset:[{...}], output: {}, rowsAffected: [] }
*/
async function sqlQuery (sql, ...params) {
var request = await getRequest()
for (var param of params) {
param.type ? request.input(param.k, param.type, param.v) : request.input(param.k, param.v)
}
log('SQL:', sql, 'Params:', params)
var result = await request.query(sql)
log('==> %j', result)
return result
}
/**
* Close the connection pool
* NOTE: Should only be called at the end of application!
*/
function closePool () {
pool && pool.close()
pool = null
}
module.exports = {
sql,
sqlQuery,
getRequest,
closePool
}