mysql_db.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. // mysql 学习资料
  2. //https://www.runoob.com/nodejs/nodejs-mysql.html
  3. //https://blog.csdn.net/hbiao68/article/details/89097853
  4. //https://github.com/mysqljs/mysql
  5. var mysql = require('mysql');
  6. var { db_config } = require('../../config/config.js')
  7. const logger = require('../logger')
  8. const utils = require('../utils.js')
  9. var port = db_config.mysql.PORT
  10. var host = db_config.mysql.HOST
  11. var username = db_config.mysql.USERNAME
  12. var password = db_config.mysql.PASSWORD
  13. var database = db_config.mysql.DATABASE
  14. var tablename = db_config.mysql.TABLENAME
  15. var open_pool = db_config.mysql.OPEN_POOL
  16. var pool_size = db_config.mysql.POOL_SIZE
  17. var opts = {
  18. host: host,
  19. user: username,
  20. password: password,
  21. port: port,
  22. database: database,
  23. }
  24. var MYSQL_INSTANCE = null;
  25. //程序启动默认创建一个 mysql 连接
  26. createDefMysqlConnect();
  27. // 开始创建
  28. function createDefMysqlConnect() {
  29. disDefMysqlConnect();
  30. logger.log('createDefMysqlConnect',database)
  31. if (open_pool) {//创建连接池
  32. opts.connectionLimit = pool_size
  33. MYSQL_INSTANCE = mysql.createPool(opts);
  34. addConnEvent()
  35. } else {//创建单连接
  36. MYSQL_INSTANCE = mysql.createConnection(opts);
  37. addConnEvent()
  38. MYSQL_INSTANCE.connect();
  39. }
  40. return MYSQL_INSTANCE;
  41. }
  42. //关闭 mysql
  43. function disDefMysqlConnect() {
  44. if (MYSQL_INSTANCE) {
  45. if (open_pool) {
  46. MYSQL_INSTANCE.end();
  47. } else {
  48. MYSQL_INSTANCE.end();
  49. }
  50. MYSQL_INSTANCE = null;
  51. logger.debug('disDefMysqlConnect')
  52. }
  53. }
  54. function getMySqlInstance() {
  55. if (MYSQL_INSTANCE) return MYSQL_INSTANCE
  56. return createDefMysqlConnect();
  57. }
  58. function addConnEvent() {
  59. if (!MYSQL_INSTANCE) return
  60. if (open_pool) {
  61. MYSQL_INSTANCE.on('acquire', function (connection) {
  62. logger.log('Connection %d acquired', connection.threadId);
  63. });
  64. MYSQL_INSTANCE.on('connection', function (connection) {
  65. logger.log('mysql connection', connection.threadId);
  66. });
  67. MYSQL_INSTANCE.on('enqueue', function () {
  68. logger.log('Waiting for available connection slot');
  69. });
  70. MYSQL_INSTANCE.on('release', function (connection) {
  71. logger.log('Connection %d released', connection.threadId);
  72. });
  73. } else {
  74. // logger.log('connected to mysql ps=', db_config.mysql)
  75. MYSQL_INSTANCE.on('connect', () => {
  76. logger.log('connected to mysql')
  77. })
  78. MYSQL_INSTANCE.on('error', function (err) {
  79. logger.error('mysql Error =>', err);
  80. });
  81. MYSQL_INSTANCE.on('restart', function () {
  82. logger.error('mysql restart =>');
  83. });
  84. }
  85. }
  86. function queryCompanyInfoFromId(id) {
  87. var sql_main = 'select * from '
  88. var sql_table_name = 'company_key_manage'
  89. var sql_where = ' WHERE '
  90. var sql_where_name = ' id= ? '
  91. var sql_where_value = id
  92. var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
  93. logger.debug('queryCompanyPrivateKeyFromId new_sql=', new_sql);
  94. return new Promise((resolve) => {
  95. if (open_pool) {
  96. getMySqlInstance().getConnection(function (err, connection) {
  97. if (err) {
  98. logger.error('queryCompanyInfoFromId', err)
  99. logger.error('new_sql', new_sql, id)
  100. resolve(null);
  101. return;
  102. }
  103. connection.query(
  104. new_sql, [sql_where_value],
  105. function selectCb(error, results) {
  106. if (error) {
  107. logger.error('queryCompanyInfoFromId', error)
  108. logger.error('new_sql', new_sql, id)
  109. resolve(null);
  110. return;
  111. }
  112. logger.log('queryCompanyPrivateKeyFromId ret=', error, results);
  113. //用完当前连接需要释放,归还给连接池
  114. connection.release();
  115. var ret;
  116. if (results && Array.isArray(results) && results.length > 0) {
  117. ret = results[0]
  118. } else {
  119. ret = null
  120. }
  121. // resolve 只能传递一个参数
  122. resolve({
  123. err: error,
  124. results: ret
  125. });
  126. }
  127. );
  128. })
  129. } else {
  130. createDefMysqlConnect()
  131. MYSQL_INSTANCE.query(
  132. new_sql, [sql_where_value],
  133. function selectCb(err, results) {
  134. logger.log('queryCompanyPrivateKeyFromId ret=', err, results);
  135. var ret;
  136. if (results && Array.isArray(results) && results.length > 0) {
  137. ret = results[0]
  138. } else {
  139. ret = null
  140. }
  141. // resolve 只能传递一个参数
  142. resolve({
  143. err: err,
  144. results: ret
  145. });
  146. disDefMysqlConnect();
  147. }
  148. );
  149. }
  150. })
  151. }
  152. /**
  153. * 查询用户私钥
  154. *
  155. * @param {*} user_address
  156. * @returns
  157. */
  158. function queryUserPrivateKeyFromUserAddress(user_address) {
  159. var sql_main = 'select * from '
  160. var sql_table_name = tablename
  161. var sql_where = ' WHERE '
  162. var sql_where_name = ' user_address= ? '
  163. var sql_where_value = user_address
  164. var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
  165. logger.debug('queryUserPrivateKeyFromUserAddress new_sql=', new_sql);
  166. return new Promise((resolve) => {
  167. if (open_pool) {
  168. getMySqlInstance().getConnection(function (err, connection) {
  169. if (err) {
  170. logger.error('queryUserPrivateKeyFromUserAddress', err)
  171. logger.error('new_sql', new_sql, id)
  172. resolve(null);
  173. return;
  174. }
  175. connection.query(
  176. new_sql, [sql_where_value],
  177. function selectCb(error, results) {
  178. if (error) {
  179. logger.error('queryUserPrivateKeyFromUserAddress', error)
  180. logger.error('new_sql', new_sql, id)
  181. resolve(null);
  182. return;
  183. }
  184. logger.log('queryUserPrivateKeyFromUserAddress ret=', error, results);
  185. //用完当前连接需要释放,归还给连接池
  186. connection.release();
  187. var ret;
  188. if (results && Array.isArray(results) && results.length > 0) {
  189. ret = results[0].user_private_key
  190. } else {
  191. ret = null
  192. }
  193. // resolve 只能传递一个参数
  194. resolve({
  195. err: err,
  196. results: ret
  197. });
  198. }
  199. );
  200. })
  201. } else {
  202. createDefMysqlConnect()
  203. MYSQL_INSTANCE.query(
  204. new_sql, [sql_where_value],
  205. function selectCb(err, results) {
  206. logger.log('queryUserPrivateKeyFromUserAddress ret=', err, results);
  207. var ret;
  208. if (results && Array.isArray(results) && results.length > 0) {
  209. ret = results[0].user_private_key
  210. } else {
  211. ret = null
  212. }
  213. // resolve 只能传递一个参数
  214. resolve({
  215. err: err,
  216. results: ret
  217. });
  218. disDefMysqlConnect();
  219. }
  220. );
  221. }
  222. })
  223. }
  224. /**
  225. * 查询用户私钥
  226. *
  227. * @param {*} user_address
  228. * @returns
  229. */
  230. function queryAllUserPrivateKeyAndUserAddress() {
  231. var sql_main = 'select * from '
  232. var sql_table_name = db_config.mysql.TABLENAME
  233. var sql_where = ' order by id desc limit 3'
  234. var sql_where_name = ' '
  235. var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
  236. logger.debug('queryAllUserPrivateKeyAndUserAddress new_sql=', new_sql);
  237. return new Promise((resolve) => {
  238. if (open_pool) {
  239. getMySqlInstance().getConnection(function (err, connection) {
  240. if (err) {
  241. logger.error('queryAllUserPrivateKeyAndUserAddress', err)
  242. logger.error('new_sql', new_sql, id)
  243. resolve(null);
  244. return;
  245. }
  246. connection.query(
  247. new_sql, [],
  248. function selectCb(error, results) {
  249. if (error) {
  250. logger.error('queryAllUserPrivateKeyAndUserAddress', error)
  251. logger.error('new_sql', new_sql, id)
  252. resolve(null);
  253. return;
  254. }
  255. //用完当前连接需要释放,归还给连接池
  256. connection.release();
  257. if (results && Array.isArray(results) && results.length > 0) {
  258. resolve(results);
  259. } else {
  260. }
  261. }
  262. );
  263. })
  264. } else {
  265. createDefMysqlConnect()
  266. MYSQL_INSTANCE.query(
  267. new_sql, [],
  268. function selectCb(err, results) {
  269. if (results && Array.isArray(results) && results.length > 0) {
  270. resolve(results);
  271. } else {
  272. }
  273. }
  274. );
  275. disDefMysqlConnect();
  276. }
  277. })
  278. }
  279. //查询语句
  280. //SELECT * FROM user_key_manage WHERE user_address='0x049D33EEE7432DB14c50911fAE4a7C38624313aA'
  281. module.exports = {
  282. queryUserPrivateKeyFromUserAddress,
  283. queryAllUserPrivateKeyAndUserAddress,
  284. queryCompanyInfoFromId,
  285. getMySqlInstance,
  286. };