Guest User

Untitled

a guest
Nov 11th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. var Promise = require('bluebird'),
  2. mysql = require('mysql'),
  3. using = Promise.using;
  4.  
  5. Promise.promisifyAll(require("mysql/lib/Connection").prototype);
  6. Promise.promisifyAll(require("mysql/lib/Pool").prototype);
  7.  
  8. var env = (process.env.NODE_ENV == 'production') ? 'prod': 'dev';
  9. var pools = {};
  10. var base = {
  11. host: undefined,
  12. user: undefined,
  13. password: undefined,
  14. database: undefined,
  15. connectionLimit: undefined,
  16. multipleStatements: true,
  17. acquireTimeout: 30000,
  18. typeCast: function (field, next) {
  19. if (field.type == "BIT" && field.length == 1) {
  20. var bit = field.string();
  21. return (bit === null) ? null : bit.charCodeAt(0);
  22. }
  23. return next();
  24. }
  25. };
  26. var dbs = {
  27. dev: {
  28. main: {
  29. host: 'localhost:80',
  30. user: 'user',
  31. password: 'password',
  32. database: 'db_dev',
  33. connectionLimit: 5
  34. },
  35. log: {
  36. host: 'localhost:80',
  37. user: 'user',
  38. password: 'password',
  39. database: 'db_dev_log',
  40. connectionLimit: 3
  41. }
  42. },
  43. prod: {
  44. main: {
  45. host: 'localhost:81',
  46. user: 'user',
  47. password: 'password',
  48. database: 'db_prod',
  49. connectionLimit: 10
  50. },
  51. log: {
  52. host: 'localhost:81',
  53. user: 'user',
  54. password: 'password',
  55. database: 'db_prod_log',
  56. connectionLimit: 5
  57. }
  58. }
  59. };
  60. var pools = {};
  61. var create_pools = function () {
  62. Object.keys(dbs[env]).forEach(function (d) {
  63. var o = Object.assign({}, base);
  64. Object.keys(dbs[env][d]).forEach(function (k) {
  65. if (o[k] === undefined) o[k] = dbs[env][d][k];
  66. });
  67. pools[d] = mysql.createPool(o);
  68. });
  69. };
  70. var get_connection = function (database) {
  71. return pools[database].getConnectionAsync().disposer(function (connection) {
  72. return connection.release();
  73. });
  74. };
  75. var query = function (database, command) {
  76. return using(get_connection(database), function (connection) {
  77. return connection.queryAsync(command);
  78. });
  79. };
  80. var execute = function (database, q, p, single, type) {
  81. if (p) q = mysql.format(q, p);
  82. return query(database, q).then(function (r) {
  83. if (type == 'sp') return (single) ? (r[0] ? r[0][0] : {}) : r[0];
  84. return (single) ? (r ? r[0] : {}) : r;
  85. }).catch(function () {
  86. return single ? {} : [];
  87. });
  88. };
  89. var raw = function (database, q, p, single) {
  90. return execute(database, q, p, single, 'raw');
  91. };
  92. var sp = function (database, q, p, single) {
  93. return execute(database, q, p, single, 'sp');
  94. };
  95. module.exports = {
  96. sp: function (database, q, p, single) {
  97. return sp(database, q, p, single);
  98. },
  99. raw: function (database, p, single) {
  100. return raw(database, q, p, single);
  101. }
  102. };
  103. create_pools();
  104.  
  105. var mock = function () {
  106. var q = 'SELECT name FROM items WHERE id = ? LIMIT 1;';
  107. execute('main', q, [1], true, 'raw').then(function (r) {
  108. console.log(r);
  109. });
  110. };
Add Comment
Please, Sign In to add comment