doomiwork 3.4.1 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,7 +43,9 @@ class Database {
43
43
  */
44
44
  async existedSqlData(sqlCommand, parameters){
45
45
  let sqlExecute = await this.executeSql(sqlCommand, parameters);
46
- return { successed: sqlExecute.successed, existed: sqlExecute.rows.length>=1}
46
+ if (!sqlExecute.successed) return {successed:false}
47
+ if (!sqlExecute.rows || sqlExecute.rows.length == 0) return { success: true, existed:false }
48
+ return { successed: true, existed: true, ...sqlExecute.rows[0] }
47
49
  }
48
50
  /**
49
51
  * 获取到第一行记录的所有字段的值
@@ -56,82 +58,101 @@ class Database {
56
58
  if (sqlExecute.successed || sqlExecute.rows===0) return {successed:false,errcode:-1,errmsg:'没有任何记录'}
57
59
  return { successed: true, ...sqlExecute.rows[0] }
58
60
  }
61
+
62
+ /**
63
+ * 单独获得一个连接串
64
+ * @returns
65
+ */
66
+ getConnection(){
67
+ return new Promise((success, failed) => {
68
+ if (!this.pool) {
69
+ return success(null);
70
+ }
71
+ this.pool.getConnection(function (err, connection) {
72
+ if (err) return success(null);;
73
+ return success(connection)
74
+ });
75
+ });
76
+ }
59
77
  /**
60
78
  * 不事务执行SQL命令
61
79
  * @param {*} sqlCommand
62
80
  * @param {*} parameters 参数
63
81
  */
64
- executeSql(sqlCommand, parameters) {
82
+ executeSql(sqlCommand, parameters,conn,autoclose=true) {
65
83
  let logger = this.logger;
66
84
  let that = this;
85
+ if (conn){
86
+ return this.executeSqlWithConnection(sqlCommand, parameters, conn, autoclose)
87
+ }
67
88
  return new Promise((success, failed) => {
68
89
  if (!this.pool) {
69
90
  return success(apiResult.DB_CONNECTED_FAILED);
70
91
  }
71
92
  ///创建出数据库连接,准备执行
72
- this.pool.getConnection(function (err, connection) {
93
+ this.pool.getConnection((err, connection)=> {
73
94
  if (err) {
74
95
  logger.error("Database Connected Failed :"+ err);
75
96
  return success(apiResult.DB_CONNECTED_FAILED);
76
97
  }
77
- else {
78
- logger.trace("SqlCommand:", sqlCommand, "Parameters:", parameters);
79
- connection.query(sqlCommand, parameters, function (err, rows) {
80
- connection.release();
81
- if (err) {
82
- logger.error("Database Query Error :" + err, sqlCommand);
83
- that.logError(null, '数据库操作错误:' + err + sqlCommand)
84
- return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage: err.message }));
85
- }
86
- return success({ successed: true, rows: rows });//,fields:fields});
87
- });
88
- }
98
+ return this.executeSqlWithConnection(sqlCommand, parameters, connection, autoclose)
89
99
  });
90
100
  });
91
101
  }
92
-
93
102
  /**
94
- * 带事务执行SQL命令
103
+ * 使用一个已存在的链接Query Sql
95
104
  * @param {*} sqlCommand
96
- * @param {*} parameters 参数
105
+ * @param {*} parameters
106
+ * @param {*} conn
107
+ * @param {*} closeAfterQuery 执行完毕后是否关闭
97
108
  */
98
- executeSqlWithTransaction(sqlCommand, parameters) {
99
- let logger = this.logger;
100
- return new Promise((success, failed) => {
101
- if (!this.pool) return success(apiResult.DB_CONNECTED_FAILED);
102
- ///创建出数据库连接,准备执行
103
- this.pool.getConnection(function (err, connection) {
109
+ executeSqlWithConnection(sqlCommand, parameters, conn, autoclose =true){
110
+ if (!conn) return Promise.resolve(apiResult.DB_CONNECTED_FAILED);
111
+ return new Promise(success=>{
112
+ this.logger.trace("SqlCommand:", sqlCommand, "Parameters:", parameters);
113
+ conn.query(sqlCommand, parameters, (err, rows) => {
114
+ if (autoclose) conn.release();
104
115
  if (err) {
105
- logger.error("Database Connected Failed :"+ err);
106
- return success(apiResult.DB_CONNECTED_FAILED);
116
+ this.logger.error("Database Query Error :" + err, sqlCommand);
117
+ this.logError(null, '数据库操作错误:' + err + sqlCommand)
118
+ return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage: err.message }));
107
119
  }
108
- logger.trace("SqlCommand:", sqlCommand, "Parameters:", parameters);
109
- ////开启事务保护
110
- connection.beginTransaction(transerr=>{
111
- if (transerr) return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage: transerr.message }));
112
- connection.query(sqlCommand, parameters, function (err, rows) {
113
- ////执行出错,事务回滚
114
- if (err) {
115
- logger.error("Database Query Error :"+ err);
116
- return connection.rollback(() => {
117
- connection.release();
118
- return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage: err.message }));
119
- })
120
- }
121
- ///执行成功,事务提交
122
- connection.commit(commiterror => {
123
- if(commiterror) {
124
- logger.error('事务提交失败 :',commiterror);
125
- return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage: err.message }));
126
- }
127
- connection.release();
128
- return success({ successed: true, rows: rows });
129
- })
130
- });
131
- })
132
-
120
+ return success({ successed: true, rows: rows });//,fields:fields});
133
121
  });
134
- });
122
+ })
123
+ }
124
+ /**
125
+ * 启动事务进行保护性操作
126
+ * @param {*} conn
127
+ * @param {*} func
128
+ */
129
+ async executeSqlWithTransaction(func,conn){
130
+ if (!conn) {
131
+ conn = await this.getConnection();
132
+ }
133
+ if (!conn) return Promise.resolve({successed:false});
134
+ return new Promise(success=>{
135
+ conn.beginTransaction(async err=>{
136
+ if (err) return success({successed:false,errcode:-1, errmessage: '【事务启动错误】'+err.message });
137
+ let result = {successed:true}
138
+ if (func && typeof (func)==='function') result = await func(params);
139
+ if (result.successed) {
140
+ conn.commit(commiterror => {
141
+ if (commiterror) {
142
+ console.log('事务提交失败 :', commiterror);
143
+ return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage: err.message }));
144
+ }
145
+ conn.release();
146
+ return success(result);
147
+ })
148
+ }else{
149
+ conn.rollback(() => {
150
+ conn.release();
151
+ return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage: err.message }));
152
+ })
153
+ }
154
+ })
155
+ })
135
156
  }
136
157
  }
137
158
  module.exports = Database;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "doomiwork",
3
- "version": "3.4.1",
3
+ "version": "3.5.0",
4
4
  "description": "doomisoft nodejs web framework",
5
5
  "main": "index.js",
6
6
  "scripts": {