lsc 4 月之前
父节点
当前提交
6a7447a948
共有 4 个文件被更改,包括 321 次插入3 次删除
  1. 94 0
      mysql.js
  2. 1 0
      package.json
  3. 164 1
      pbl.js
  4. 62 2
      yarn.lock

+ 94 - 0
mysql.js

@@ -0,0 +1,94 @@
+//参数
+var us = {
+    mysql: require('mysql'),
+    sqle: {}
+};
+
+//连接数据库
+us.mysqlconnection = function(host, database) {
+    if (!us.sqle[host] || !us.sqle[host][database]) { //配置数据库连接 
+        let port = host == '172.16.12.7' ? 3306 : 3306;
+        if(host == '123.58.32.152'){
+            port = 20330;
+        }else if(host == '123.58.32.151'){
+            port = 20007;
+        }
+        // let port = host == '123.58.32.152' ? 20330 : 20007;
+        us.sqle[host] = us.sqle[host] || {};
+        us.sqle[host][database] = us.mysql.createPool({
+            connectionLimit: 0,
+            host: host, //数据库地址
+            // host: '123.58.32.151', //数据库地址
+            user: "root", //用户名
+            password: host == '127.0.0.1' ? "root" : "cocorobo", //密码
+            database: database, //数据库名称
+            // port: 20007 //端口
+            port: port //端口
+        }); //连接超时和错误从连
+    }
+    //connectionLimit: 1000, 
+    return us.sqle[host][database]; //返回连接对象
+}
+
+
+//连接数据库调用
+exports.usselect = function(param, callback) {
+    if (param.length > 1) {
+        var _mysqlconnection = us.mysqlconnection(param[0], param[1]); //创建连接池
+        _mysqlconnection.getConnection(function(error, connection) { //获取连接
+            if (error) { //连接错误
+                console.log("连接失败:", error);
+            } else { //连接成功
+                for (i = 0; i < param.length; i++) {
+                    param[i] = decodeURIComponent(param[i]);
+
+                } //格式化处理参数
+                var i, _sql = "CALL ";
+                var _param = new Array();
+                if (param.length > 3) { //带有参数的sql语句  如:'call test(?, ?, ?);'
+                    _param = param.slice(3) //截取有效参数
+                    _sql += (param[2] || "") + "(?"; //拼接存储过程名称 
+                    //_s += (p[2] || "") + "('" + p.slice(3).join("','") + "');";
+                    //, + ? 拼接参数 该方法拼接后比数组长度少一因此上一句代码中默认拼接了第一个参数
+                    _sql += Array(_param.length).join(",?");
+                    _sql += ");"; //拼接结果语句
+                } else { //不带参数的sql语句 如:'call test();'
+                    _sql += param[2] + "();";
+                }
+                // console.log("拼凑的MySQl语句为:", _sql);
+                connection.query(_sql, _param, function(error, results, fields) { //执行sql语句 
+                    if (results) {
+                        // if (results.pop) {
+                        //     results.pop();
+                        // }
+                        //console.log(JSON.stringify(results)); 输出结果集
+                        //执行回调函数
+                        //results.affectedRows != null 如果受影响行不等于null(空) 则返回受影响行数
+                        //results.affectedRows != null 如果受影响行不等于null(空) 则返回受影响行数
+                        //results.length > 1 ? results : results[0] 如果结果集为单行则直接返回Object对象 否则返回数组对象
+                        callback(results.affectedRows != null ? results.affectedRows : results.length > 1 ? results : results[0]);
+                    } else { //执行错误
+                        console.log("sql执行失败", error || "");
+                        callback(error);
+                    }
+                });
+
+                connection.release(function(error) { //释放资源
+                    if (error) console.log("连接释放错误", error);
+                });
+
+            }
+        });
+    }
+}
+
+
+//重新连接处理
+// us.mysqlconnet.reconnection = function (host, database, error) {
+//     if (error) {
+//         console.log("连接失败,尝试重连", error);
+//         setTimeout(function () {
+//             us.mysqlconnection(host, database)
+//         }, 2000);
+//     }
+// }

+ 1 - 0
package.json

@@ -16,6 +16,7 @@
     "express": "^4.18.2",
     "https": "^1.0.0",
     "morgan": "^1.10.0",
+    "mysql": "^2.18.1",
     "pg": "^8.13.1",
     "querystring": "^0.2.1",
     "r2r-js": "^1.2.9",

+ 164 - 1
pbl.js

@@ -5,7 +5,19 @@ const request = require("request");
 const bcrypt = require("bcryptjs");
 const router = express.Router(); // get an instance of the express Router
 const querystring = require("querystring");
-// var mysql = require("./mysql");
+var mysql = require("./mysql");
+// const _mysqlLabor = ["123.58.32.151", "pbl"]; //edu數據庫信息
+// const _mysqluser = ["123.58.32.151", "cocorobouser"]; //用户数据库信息
+// const _getmysqlLabor = ["123.58.32.151", "pbl"]; //edu數據庫信息
+// const _getmysqluser = ["123.58.32.151", "cocorobouser"]; //edu數據庫信息
+const _mysqlLabor = ["172.16.12.5", "pbl"]; //edu數據庫信息
+const _mysqluser = ["172.16.12.5", "cocorobouser"]; //edu數據庫信息
+// const _getmysqlLabor = ["172.16.12.5", "pbl"]; //edu數據庫信息
+// const _getmysqluser = ["172.16.12.5", "cocorobouser"]; //edu數據庫信息
+const _getmysqlLabor2 = ["172.16.12.7", "pbl"]; //edu數據庫信息
+const _getmysqlLabor = ["172.16.12.7", "pbl"]; //edu數據庫信息
+const _getmysqluser = ["172.16.12.7", "cocorobouser"]; //edu數據庫信息
+const _localhost = ["127.0.0.1", "pbl"]; //edu數據庫信息
 const crypto = require("crypto");
 const https = require("https");
 const { Pool } = require('pg');
@@ -16,5 +28,156 @@ router.route("/login").all(async (req, res, next) => {
     loginHandler(req, res);
 });
 
+router.route("/selectUser").all((req, res, next) => {
+    var json = queryString(req.url);
+    getmysql(req, res, "selectUser", json["userid"]);
+});
+
+
+function generateAPIKey(username) {
+    let timeStamp = new Date().getTime();
+
+    let hashStr = timeStamp + username;
+
+    let digest = crypto
+        .createHash("sha256")
+        .update(hashStr, "utf8")
+        .digest("hex");
+
+    return digest;
+}
+
+queryString = function(url) {
+    var a = url.split("?");
+    var json = querystring.parse(a[1]);
+    return json;
+};
+
+//post存儲過程處理
+postmysql = function(req, res, functionname) {
+    //mode的處理
+    if (req.body[0]) {
+        p = Object.values(req.body[0]);
+        p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname);
+        //執行存儲過程
+        mysql.usselect(p, function(ret) {
+            res.end(JSON.stringify(ret));
+        });
+    }
+};
+
+//post存儲過程處理
+postmysql2 = function(req, res, functionname) {
+    //mode的處理
+    if (req.body) {
+        p = Object.values(req.body)[0].split(",");
+        p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname);
+        //執行存儲過程
+        mysql.usselect(p, function(ret) {
+            res.end(JSON.stringify(ret));
+        });
+    }
+};
+
+//post存儲過程處理
+postmysql3 = function(req, res, functionname) {
+    //mode的處理
+    if (req.body) {
+        p = Object.values(req.body);
+        p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname);
+        //執行存儲過程
+        mysql.usselect(p, function(ret) {
+            res.end(JSON.stringify(ret));
+        });
+    }
+};
+
+//get獲取數據庫信息
+getmysql = function(req, res, functionname, ...p) {
+    p = p || [];
+    p.unshift(_getmysqlLabor[0], _getmysqlLabor[1], functionname);
+    //執行存儲過程
+    mysql.usselect(p, function(ret) {
+        res.end(JSON.stringify(ret));
+    }); //
+};
+
+//get獲取數據庫信息
+getmysql2 = function(req, res, functionname, ...p) {
+    p = p || [];
+    p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname);
+    //執行存儲過程
+    mysql.usselect(p, function(ret) {
+        res.end(JSON.stringify(ret));
+    }); //
+};
+
+//get獲取數據庫信息
+getmysql3 = function(req, res, functionname, ...p) {
+    p = p || [];
+    p.unshift(_getmysqlLabor2[0], _getmysqlLabor2[1], functionname);
+    //執行存儲過程
+    mysql.usselect(p, function(ret) {
+        res.end(JSON.stringify(ret));
+    }); //
+};
+
+
+//post存储过程处理
+
+userpostmysql = function(req, res, functionname) {
+    //mode的处理
+
+    if (req.body.mode) {
+        p = req.body.mode.split(",");
+
+        p.unshift(_mysqluser[0], _mysqluser[1], functionname);
+
+        //执行存储过程
+
+        mysql.usselect(p, function(ret) {
+            res.end(JSON.stringify(ret));
+        });
+    }
+};
+
+//get获取数据库信息
+
+usergetmysql = function(req, res, functionname, ...p) {
+    p = p || [];
+
+    p.unshift(_mysqluser[0], _mysqluser[1], functionname);
+    
+    //执行存储过程
+
+    mysql.usselect(p, function(ret) {
+        res.end(JSON.stringify(ret));
+    }); //
+};
+
+//post存儲過程處理
+postmysqlLocal = function(req, res) {
+    //mode的處理
+    if (req.body[0]) {
+        p = Object.values(req.body[0]);
+        p.unshift(_localhost[0], _localhost[1]);
+        //執行存儲過程
+        mysql.usselect(p, function(ret) {
+            res.end(JSON.stringify(ret));
+        });
+    }
+};
+
+postmysqlOnline = function(req, res) {
+    //mode的處理
+    if (req.body[0]) {
+        p = Object.values(req.body[0]);
+        p.unshift(_mysqlLabor[0], _mysqlLabor[1]);
+        //執行存儲過程
+        mysql.usselect(p, function(ret) {
+            res.end(JSON.stringify(ret));
+        });
+    }
+};
 
 module.exports = router;

+ 62 - 2
yarn.lock

@@ -621,6 +621,11 @@ bcryptjs@^2.4.3:
   resolved "https://registry.npmmirror.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb"
   integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==
 
+bignumber.js@9.0.0:
+  version "9.0.0"
+  resolved "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075"
+  integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==
+
 body-parser@1.20.3:
   version "1.20.3"
   resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6"
@@ -776,6 +781,11 @@ core-util-is@1.0.2:
   resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
   integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
 
+core-util-is@~1.0.0:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+  integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
 crypto@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmmirror.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037"
@@ -1205,7 +1215,7 @@ inflight@^1.0.4:
     once "^1.3.0"
     wrappy "1"
 
-inherits@2, inherits@2.0.4:
+inherits@2, inherits@2.0.4, inherits@~2.0.3:
   version "2.0.4"
   resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -1225,6 +1235,11 @@ is-typedarray@~1.0.0:
   resolved "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
   integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
 
+isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
 isstream@~0.1.2:
   version "0.1.2"
   resolved "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
@@ -1526,6 +1541,16 @@ ms@2.1.3, ms@^2.1.3:
   resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
   integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
 
+mysql@^2.18.1:
+  version "2.18.1"
+  resolved "https://registry.npmmirror.com/mysql/-/mysql-2.18.1.tgz#2254143855c5a8c73825e4522baf2ea021766717"
+  integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==
+  dependencies:
+    bignumber.js "9.0.0"
+    readable-stream "2.3.7"
+    safe-buffer "5.1.2"
+    sqlstring "2.3.1"
+
 nanoid@^3.3.8:
   version "3.3.8"
   resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
@@ -1752,6 +1777,11 @@ pretty-format@^29.7.0:
     ansi-styles "^5.0.0"
     react-is "^18.0.0"
 
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
 proxy-addr@~2.0.7:
   version "2.0.7"
   resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
@@ -1841,6 +1871,19 @@ react@^18:
   dependencies:
     loose-envify "^1.1.0"
 
+readable-stream@2.3.7:
+  version "2.3.7"
+  resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+  integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
 request@^2.88.2:
   version "2.88.2"
   resolved "https://registry.npmmirror.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
@@ -1884,7 +1927,7 @@ rrweb-snapshot@^2.0.0-alpha.17:
   dependencies:
     postcss "^8.4.38"
 
-safe-buffer@5.1.2:
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.2"
   resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
@@ -2015,6 +2058,11 @@ sprintf-js@~1.0.2:
   resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
   integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
 
+sqlstring@2.3.1:
+  version "2.3.1"
+  resolved "https://registry.npmmirror.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40"
+  integrity sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==
+
 sshpk@^1.7.0:
   version "1.18.0"
   resolved "https://registry.npmmirror.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028"
@@ -2042,6 +2090,13 @@ statuses@2.0.1:
   resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
   integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
 
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
 supports-color@^7.1.0:
   version "7.2.0"
   resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -2140,6 +2195,11 @@ uri-js@^4.2.2:
   dependencies:
     punycode "^2.1.0"
 
+util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
 utils-merge@1.0.1:
   version "1.0.1"
   resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"