db.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. const mysql = require('mysql')
  2. const config = require('./config.js')
  3. var pool = undefined;
  4. function initPool() {
  5. pool = mysql.createPool({
  6. host: config.db.host,
  7. port: config.db.port,
  8. user: config.db.user,
  9. password: config.db.password,
  10. database: config.db.database || '',
  11. charset: 'utf8',
  12. connectionLimit: 10
  13. });
  14. }
  15. function getTransactionConnection() {
  16. return new Promise((resolve, reject) => {
  17. if (pool == undefined) {
  18. reject('db not init');
  19. }
  20. pool.getConnection((err, connection) => {
  21. if (err) {
  22. reject(err);
  23. } else {
  24. connection.beginTransaction((err) => {
  25. if (err) {
  26. reject(err);
  27. } else {
  28. resolve(connection);
  29. }
  30. });
  31. }
  32. });
  33. });
  34. }
  35. function query(connection, sql, datas) {
  36. return new Promise((resolve, reject) => {
  37. connection.query(sql, datas, (err, results, fields) => {
  38. if (err) {
  39. reject(err);
  40. } else {
  41. resolve(results, fields);
  42. }
  43. });
  44. });
  45. }
  46. module.exports.init = function () {
  47. if (pool != undefined) {
  48. pool.end();
  49. pool = undefined;
  50. }
  51. initPool();
  52. }
  53. module.exports.close = function(){
  54. if(pool!=undefined){
  55. pool.end();
  56. pool = undefined;
  57. }
  58. }
  59. module.exports.query = function (sql, datas) {
  60. return new Promise((resolve, reject) => {
  61. pool.query(sql, datas, (err, results, fields) => {
  62. if (err) {
  63. reject(err);
  64. } else {
  65. resolve(results, fields);
  66. }
  67. });
  68. });
  69. }
  70. module.exports.batchQuery = function (sql, datas) {
  71. return new Promise((resolve, reject) => {
  72. getTransactionConnection().then(connection => {
  73. let results = [];
  74. for (var i = 0; i < datas.length; i++) {
  75. results.push(query(connection, sql, datas[i]));
  76. }
  77. Promise.all(results).then(() => {
  78. connection.commit(err => {
  79. if (err) {
  80. connection.rollback(() => {
  81. reject(err);
  82. });
  83. } else {
  84. connection.release();
  85. resolve(datas.length);
  86. }
  87. });
  88. }).catch(err => {
  89. connection.rollback(() => {
  90. reject(err);
  91. })
  92. });
  93. }).catch(err => {
  94. reject(err);
  95. });
  96. });
  97. }