gcl
Version:
码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现
556 lines (455 loc) • 20.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NiMySQLDataFactory = undefined;
var _regenerator = require("babel-runtime/regenerator");
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator");
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _get2 = require("babel-runtime/helpers/get");
var _get3 = _interopRequireDefault(_get2);
var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of");
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn");
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require("babel-runtime/helpers/inherits");
var _inherits3 = _interopRequireDefault(_inherits2);
var _tool = require("../common/tool");
var _tool2 = _interopRequireDefault(_tool);
var _promise = require("mysql2/promise");
var _promise2 = _interopRequireDefault(_promise);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var pri = _tool2.default.pris();
/**
* MySQL 池连接方式工厂
*/
var NiMySQLDataFactory = exports.NiMySQLDataFactory = function (_NiDataFactory) {
(0, _inherits3.default)(NiMySQLDataFactory, _NiDataFactory);
function NiMySQLDataFactory() {
(0, _classCallCheck3.default)(this, NiMySQLDataFactory);
var _this = (0, _possibleConstructorReturn3.default)(this, (NiMySQLDataFactory.__proto__ || (0, _getPrototypeOf2.default)(NiMySQLDataFactory)).call(this));
var that = _this;
that.idic = {};
var _pri = pri(that, {
MySQLConnection: function (_NiDataConnection) {
(0, _inherits3.default)(MySQLConnection, _NiDataConnection);
function MySQLConnection() {
var _this3 = this;
(0, _classCallCheck3.default)(this, MySQLConnection);
var _this2 = (0, _possibleConstructorReturn3.default)(this, (MySQLConnection.__proto__ || (0, _getPrototypeOf2.default)(MySQLConnection)).call(this));
var that = _this2;
var _pri2 = pri(_this2, {
cmds: [],
conn: null,
getValue: function getValue(p) {
return p.value;
},
toList: function toList(vals) {
var _pri3 = pri(that),
_ = _pri3._,
__ = _pri3.__;
if (vals[0]) {
var ret = [];
for (var i = 0; i < vals.length; i++) {
ret.push(__.toList(vals[i]));
}return ret;
} else return function () {
var ret = {};
for (var k in vals) {
switch (_tool2.default.getType(vals[k]).toLowerCase()) {
case "date":
case "number":
case "boolean":
case "string":
case "null":
ret[k] = vals[k];
break;
case "uint8array":
// ret[k] = parseInt(Buffer.from(vals[k])[0]);
ret[k] = Buffer.from(vals[k]).toString();
break;
}
}
return ret;
}();
},
invoke: function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(command, params) {
var _pri4, _2, _3, result, data, i;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_pri4 = pri(that), _2 = _pri4._, _3 = _pri4.__;
_context.next = 4;
return _tool2.default.callback(_3.conn.query, _3.conn, _2.prepare(command, params));
case 4:
result = _context.sent;
data = [];
if (!result[0]) result = [[]];
//过滤mysql自定义的更新结果JSON
result = result.filter(function (v) {
return v.serverStatus == undefined;
});
//过滤mysql上复制:=
result = result.filter(function (v) {
switch (_tool2.default.getType(v)) {
case "object":
case "Object":
for (var k in v) {
if (k.indexOf(":=") >= 0) return false;
}
break;
case "Array":
var _v = v.filter(function (r) {
for (var k2 in r) {
if (k2.indexOf(":=") >= 0) return false;
}
return true;
});
return _v.length > 0 || v.length == 0;
}
return true;
});
if (!result[0]) result = [[]];
if (_tool2.default.getType(result[0]).toLowerCase() != "array") result = [result];
//自动补充mysql在单sql下不是2个嵌套数据的问题
if (result && result.length > 0) for (i = 0; i < result.length; i++) {
if (typeof result[i] != "undefined" && result[i].length > 0) data.push(_3.toList(result[i]));else if (typeof result[i] != "undefined" && !_tool2.default.isArray(result[i])) {
//if (typeof(result[i].affectedRows) == 'undefined') {
data.push(_3.toList([result[i]]));
} else {
data.push([]);
}
} else data.push([]);
return _context.abrupt("return", data);
case 15:
_context.prev = 15;
_context.t0 = _context["catch"](0);
console.log(command, params);
console.log(_context.t0.message);
throw _context.t0;
case 20:
case "end":
return _context.stop();
}
}
}, _callee, _this3, [[0, 15]]);
}));
return function invoke(_x, _x2) {
return _ref.apply(this, arguments);
};
}()
}),
_ = _pri2._,
__ = _pri2.__;
_.params = {
multipleStatements: true,
connectionLimit: 10
};
return _this2;
}
(0, _createClass3.default)(MySQLConnection, [{
key: "prepare",
value: function prepare(cmd, paras) {
var _pri5 = pri(this),
_ = _pri5._,
__ = _pri5.__;
//需要将{}转成[] 处理
if (cmd && paras) {
var vals = [];
cmd = cmd.replace(/\{[a-zA-Z0-9_]+\}/g, function (data) {
try {
data = data.substr(1, data.length - 2);
return __.getValue(paras[data]);
} catch (e) {
throw data + "未找到参数定义";
}
}).replace(/\?[a-zA-Z0-9_]+/g, function (data) {
try {
vals.push(__.getValue(paras[data.trim("?")]));
return "?";
} catch (e) {
throw data.trim("?") + "未找到参数定义";
}
});
return {
sql: cmd,
values: vals,
timeout: _.params.timeout || 60000 //1分钟
};
} else throw new Error("prepare方法要求写入command参数与paras参数");
}
}, {
key: "invoke",
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(cmd) {
var _pri6, _, __;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
//需要处理单条与多条s
_pri6 = pri(this), _ = _pri6._, __ = _pri6.__;
if (!_.transaction) {
_context2.next = 5;
break;
}
__.cmds.push({
command: cmd.command,
params: cmd.params
});
_context2.next = 8;
break;
case 5:
_context2.next = 7;
return __.invoke(cmd.command, cmd.params);
case 7:
return _context2.abrupt("return", _context2.sent);
case 8:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function invoke(_x3) {
return _ref2.apply(this, arguments);
}
return invoke;
}()
}, {
key: "commit",
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4() {
var _this4 = this;
var _pri7, _, __, data, cmds;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_pri7 = pri(this), _ = _pri7._, __ = _pri7.__;
if (!_.transaction) {
_context4.next = 22;
break;
}
_context4.prev = 2;
_context4.next = 5;
return _tool2.default.callback(__.conn.beginTransaction, __.conn);
case 5:
data = [];
cmds = __.cmds;
__.cmds = [];
_context4.next = 10;
return _tool2.default.each(cmds, function () {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(v) {
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.t0 = data;
_context3.next = 3;
return __.invoke(v.command, v.params);
case 3:
_context3.t1 = _context3.sent;
_context3.t0.push.call(_context3.t0, _context3.t1);
return _context3.abrupt("return", false);
case 6:
case "end":
return _context3.stop();
}
}
}, _callee3, _this4);
}));
return function (_x4) {
return _ref4.apply(this, arguments);
};
}(), true);
case 10:
_context4.next = 12;
return _tool2.default.callback(__.conn.commit, __.conn);
case 12:
return _context4.abrupt("return", data);
case 15:
_context4.prev = 15;
_context4.t0 = _context4["catch"](2);
_context4.next = 19;
return _tool2.default.callback(__.conn.rollback, __.conn);
case 19:
throw _context4.t0;
case 20:
_context4.next = 23;
break;
case 22:
throw new Error("非事务条件下不可调用此方法");
case 23:
case "end":
return _context4.stop();
}
}
}, _callee4, this, [[2, 15]]);
}));
function commit() {
return _ref3.apply(this, arguments);
}
return commit;
}()
}, {
key: "open",
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7() {
var _pri8, _, __, key, getonconn;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
_pri8 = pri(this), _ = _pri8._, __ = _pri8.__;
key = _tool2.default.hash2(_tool2.default.toJsonString(_.params));
that.idic[key] = that.idic[key] || _promise2.default.createPool(_.params);
getonconn = function () {
var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6() {
var conn;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return _tool2.default.callback(that.idic[key].getConnection, that.idic[key]);
case 2:
conn = _context6.sent;
conn._key = key;
if (!!!conn._ison) {
conn._ison = true;
conn.on("error", function () {
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(err) {
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
if (!(err.code == "PROTOCOL_CONNECTION_LOST" || err.code == "PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR")) {
_context5.next = 5;
break;
}
try {
//conn.close();
that.idic[key] && that.idic[key].releaseConnection(conn);
} catch (e) {}
_context5.next = 4;
return getonconn();
case 4:
__.conn = _context5.sent;
case 5:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
return function (_x5) {
return _ref7.apply(this, arguments);
};
}());
}
return _context6.abrupt("return", conn);
case 6:
case "end":
return _context6.stop();
}
}
}, _callee6, this);
}));
return function getonconn() {
return _ref6.apply(this, arguments);
};
}();
_context7.next = 6;
return getonconn();
case 6:
__.conn = _context7.sent;
_context7.next = 9;
return (0, _get3.default)(MySQLConnection.prototype.__proto__ || (0, _getPrototypeOf2.default)(MySQLConnection.prototype), "open", this).call(this);
case 9:
case "end":
return _context7.stop();
}
}
}, _callee7, this);
}));
function open() {
return _ref5.apply(this, arguments);
}
return open;
}()
}, {
key: "close",
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8() {
var _pri9, _, __;
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
_pri9 = pri(this), _ = _pri9._, __ = _pri9.__;
try {
if (__.conn && __.conn._key && that.idic[__.conn._key]) that.idic[__.conn._key].releaseConnection(__.conn);else if (__.conn && __.conn.end) __.conn.end();else if (__.conn && __.conn.dispose) __.conn.dispose();
} catch (e) {}
__.cmds = [];
__.conn = null;
_context8.next = 6;
return (0, _get3.default)(MySQLConnection.prototype.__proto__ || (0, _getPrototypeOf2.default)(MySQLConnection.prototype), "close", this).call(this);
case 6:
case "end":
return _context8.stop();
}
}
}, _callee8, this);
}));
function close() {
return _ref8.apply(this, arguments);
}
return close;
}()
}]);
return MySQLConnection;
}(NiDataConnection)
}),
_ = _pri._,
__ = _pri.__;
return _this;
}
(0, _createClass3.default)(NiMySQLDataFactory, [{
key: "createDBConnection",
value: function createDBConnection() {
var _pri10 = pri(this),
_ = _pri10._,
__ = _pri10.__;
return new __.MySQLConnection();
}
}, {
key: "dispose",
value: function dispose() {
var _this5 = this;
for (var i in this.idic) {
if (this.idic[i] && this.idic[i].dispose) {
(function () {
var v = _this5.idic[i];
_tool2.default.tryC(function () {
v.dispose();
});
})();
}
}
}
}]);
return NiMySQLDataFactory;
}(NiDataFactory);
exports.default = {
NiMySQLDataFactory: NiMySQLDataFactory
};
//# sourceMappingURL=mysql2.js.map