如題;node后台使用mysql數據庫,並使用事務來管理數據庫操作。
這里主要講一個事務的封裝並寫了一個INSERT 插入操作。
code:
基礎code:
db.config.js
const mysql = require('mysql')
const pool = mysql.createPool({
connectionLimit: 20, //連接池連接數
host: 'localhost', //數據庫地址,這里用的是本地
database: 'xxxx', //數據庫名稱
user: 'xxxxx', // username
password: '*****' // password
})
//返回一個Promise鏈接
const connectHandle = () => new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if(err) {
console.error('鏈接錯誤:' + err.stack + '\n' + '鏈接ID:' + connection.threadId)
reject(err)
} else {
resolve(connection)
}
})
})
module.exports = connectHandle
事務操作
const connectHandler = require('./db.config') //引入上面所講的數據庫基礎配置
const insertHandler = async (vals) => {
const connection = await connectHandler() // 得到鏈接
const tablename = 'xxxxx' //動態table(表)名稱
//開啟事務
connection.beginTransaction( err => {
if(err) {
return '開啟事務失敗'
} else {
//執行INSERT插入操作
connection.query(`INSERT INTO ${tablename} SET ?`, vals, (e, rows, fields) => {
if(e) {
return connection.rollback(() => {
console.log('插入失敗數據回滾')
})
} else {
connection.commit((error) => {
if(error) {
console.log('事務提交失敗')
}
})
connection.release() // 釋放鏈接
return {rows, success: true} // 返回數據庫操作結果這里數據格式可根據個人或團隊規范來定制
}
})
}
})
}
module.exports = {
insertHandler
}
相關操作步驟已經在注釋中寫明,本人實測有效。如需使用需加上自己的數據庫配置及相關表明等動態配置。
