The npm module mysql module is a module for operating the mysql database on the node side
Talking about trouble, it is still comprehensive on the official website
https://www.npmjs.com/package/mysql
Code directly
const config = {
host: "localhost",
port: "3306",
user: "root",
password: "root",
database: "node_app"
};
module.exports = config;
const mysql = require("mysql");
const defaultConfig = require("./config");
// 自己封装工具类
class ConnectionPool {
constructor(config = {}) {
this.pool = mysql.createPool({
...defaultConfig,
...config
});
}
// 封装查询
query(sql) {
return new Promise((resolve, reject) => {
this.pool.getConnection((err, connection) => {
if (err) {
reject(err);
} else {
connection.query(sql, (err2, rows) => {
if (err2) {
reject(err2);
} else {
resolve(rows);
}
connection.release();
});
}
});
});
}
// 封装事务处理
transaction(sqlArr) {
return new Promise((resolve, reject) => {
this.pool.getConnection((err, connection) => {
if (err) {
reject(err);
} else {
connection.beginTransaction(err2 => {
if (err2) {
reject(err2);
} else {
this._queryTran(
connection,
0,
sqlArr,
resolve,
reject
);
}
});
}
});
});
}
// 递归执行sql
_queryTran(connection, index, arr, resolve, reject) {
connection.query(arr[index], (err, row) => {
if (err) {
connection.rollback(err2 => {
if (err2) {
reject({ err, err2 });
connection.release();
} else {
reject(err);
connection.release();
}
});
} else if (index + 1 < arr.length) {
this._queryTran(connection, index + 1, arr, resolve, reject);
} else {
connection.commit(err3 => {
if (err3) {
connection.rollback(err3 => {
if (err4) {
reject({ err3, err4 });
connection.release();
} else {
reject(err3);
connection.release();
}
});
} else {
resolve("success");
connection.release();
}
});
}
});
}
// 关闭连接池
end() {
this.pool.end(err => {
if (err) {
console.error(err);
}
});
}
}
module.exports = new ConnectionPool();
test
const Pool = require("./connection");
const pool = new Pool();
pool.query("select * from user")
.then(rows => {
console.log(rows);
})
.catch(err => {
console.error(err);
});
const arr = [
"INSERT INTO `user` VALUES (null,'kim1',77,666,'hei')",
"INSERT INTO `user` VALUES (null,'kim2',77,666,'hei')",
"INSERT INTO `user` VALUES (1,'kim3',77,666,'hei')",
"INSERT INTO `user` VALUES (null,'kim3',77,666,'hei')"
];
pool.transaction(arr)
.then(res => {
pool.end();
})
.catch(err => {
console.error(err);
pool.end();
});