mysql.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. var us = {
  2. mysql: require('mysql'),
  3. sqle: {}
  4. };
  5. us.mysqlconnection = function (host, database) {
  6. if (!us.sqle[host] || !us.sqle[host][database]) {
  7. let port = 3306;
  8. if (host == '123.58.32.152') port = 20330;
  9. else if (host == '183.36.25.92' || host == '183.36.26.8') port = 20007;
  10. us.sqle[host] = us.sqle[host] || {};
  11. us.sqle[host][database] = us.mysql.createPool({
  12. connectionLimit: 10, // ★ 必须明确设置,建议 10~20
  13. queueLimit: 0, // 0 = 不限制排队(默认)
  14. acquireTimeout: 10000, // 取连接超时
  15. waitForConnections: true,
  16. host: host,
  17. user: "root",
  18. password: host == '127.0.0.1' ? "root" : "cocorobo",
  19. charset: 'utf8mb4_general_ci',
  20. database: database,
  21. port: port,
  22. connectTimeout: 10000,
  23. // 长连接保活,防止被 MySQL/中间件掐断后残留死连接
  24. enableKeepAlive: true,
  25. keepAliveInitialDelay: 10000
  26. });
  27. }
  28. return us.sqle[host][database];
  29. };
  30. // ★ 用 pool.query() 替代 getConnection+query+release
  31. exports.usselect = function (param, callback) {
  32. if (param.length <= 1) return callback(new Error('param invalid'));
  33. var pool = us.mysqlconnection(param[0], param[1]);
  34. // 参数解码
  35. try {
  36. for (var i = 0; i < param.length; i++) {
  37. param[i] = decodeURIComponent(param[i]);
  38. }
  39. } catch (e) {
  40. console.log("decodeURIComponent 失败:", e);
  41. return callback(e);
  42. }
  43. var _sql = "CALL ";
  44. var _param = [];
  45. if (param.length > 3) {
  46. _param = param.slice(3);
  47. _sql += (param[2] || "") + "(?";
  48. _sql += Array(_param.length).join(",?");
  49. _sql += ");";
  50. } else {
  51. _sql += param[2] + "();";
  52. }
  53. pool.query(_sql, _param, function (error, results) {
  54. if (error) {
  55. console.log("sql执行失败", error);
  56. return callback(error);
  57. }
  58. callback(results.affectedRows != null
  59. ? results.affectedRows
  60. : results.length > 1 ? results : results[0]);
  61. });
  62. };
  63. exports.usquery = function (param, callback) {
  64. if (param.length <= 2) return callback(new Error('param invalid'));
  65. var pool = us.mysqlconnection(param[0], param[1]);
  66. var _sql = param[2];
  67. var _param = param.length > 3 ? param.slice(3) : [];
  68. pool.query(_sql, _param, function (error, results) {
  69. if (error) {
  70. console.log("sql执行失败", error);
  71. return callback(error);
  72. }
  73. callback(results.affectedRows != null
  74. ? results.affectedRows
  75. : results.length > 1 ? results : results[0]);
  76. });
  77. };
  78. //重新连接处理
  79. // us.mysqlconnet.reconnection = function (host, database, error) {
  80. // if (error) {
  81. // console.log("连接失败,尝试重连", error);
  82. // setTimeout(function () {
  83. // us.mysqlconnection(host, database)
  84. // }, 2000);
  85. // }
  86. // }