222
schangxiang@126.com
2025-06-13 6a8393408d8cefcea02b7a598967de8dc1e565c2
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
'use strict'
 
const mssql = require('./')
// const wtf = require('wtfnode')
 
const sqlConfig = {
  password: 'Upper_l0wercase',
  database: 'di_production',
  // connectionTimeout: undefined,
  // requestTimeout: 30000,
  stream: false,
  options: {
    encrypt: true,
    readOnlyIntent: true
  },
  port: 1433,
  user: 'sa',
  server: 'localhost',
  pool: {
    acquireTimeoutMillis: 1000,
    propagateCreateError: true,
  },
}
 
let errorCount = 0
 
let pool
 
let reconnectTimer
 
let startTime
 
function createPool() {
  return new mssql.ConnectionPool(sqlConfig)
}
 
const poolRequest = createPool()
 
function connect () {
  console.log('trying to connect to server')
  // const poolRequest = createPool()
  mssql.on('error', () => {
    console.log('error event fired')
  })
  return mssql.connect(sqlConfig).then((connection) => {
    // setTimeout(connection.close.bind(connection), 2000)
    console.log('connection established')
    console.log(connection)
    connection.on('error', (e) => {
      errorCount++
      // clearInterval(interval)
      pool = null
      // console.log('connection error', e)
      if (connection.connected || connection.connecting) {
        console.log('Connection errored, trying to close connection', errorCount, e)
        connection.close((e) => {
          console.log(new Date() - startTime)
          console.log('connection closed')
          if (e) {
            errorCount++
            // console.log('connection close error', errorCount)
          } else {
            // if (reconnectTimer) {
            //   clearTimeout(reconnectTimer)
            // }
            // reconnectTimer = setTimeout(reconnect, 1500)
          }
        })
      }
    })
    pool = connection
  }).catch((e) => {
    errorCount++
    console.log('failed to establish connection', errorCount, e)
    console.log(e.toString())
    // clearInterval(interval)
    throw e
  })
}
 
function reconnect () {
  console.log('reconnect called')
  connect()
}
 
function getTime () {
  console.log('getTime called')
  if (!pool) {
    console.log('no connection is ready')
    return
  }
  console.log('attempting query')
  startTime = new Date()
  pool.query('SELECT GETUTCDATE()').then((result) => {
    console.log(result)
    setTimeout(getTime, 2000)
    // console.log('closing')
    // pool.close(() => {
    //   console.log('closed')
    // })
  }).catch((e) => {
    errorCount++
    console.log('error performing query', errorCount, e)
    // wtf.dump()
    // clearInterval(interval)
  })
}
 
let interval
 
connect().then(() => {
  getTime()
  // interval = setInterval(getTime, 5000)
}).catch(() => {
 
})
 
// setTimeout(poolRequest.close.bind(poolRequest), 15000)