第一次封装函数,难免有地方考虑不到,如果有发现错误或可以补充修改的地方,欢迎指正。
📌 创建 mysql文件夹,包含 mysql.js 和 index.js 两个文件
mysql.js文件内容
//需求:封装一个功能模块来操作mysql数据库
//引入mysql包
const mysql = require('mysql');
//创建mysql数据库连接:
const mysqlObj = mysql.createConnection({ host: "127.0.0.1", port: 3306, user: "root", password: "123456", database: "shb" });
//连接mysql数据库:
mysqlObj.connect();
//执行sql语句:
function exec(sql, sqlParams) {
return new Promise((resolve, reject) => {
//执行sql语句:
mysqlObj.query(sql,sqlParams, (err, data) => {
//需求:返回data
if (err) { //失败
resolve([false, 'sql语句错误']);
} else { //成功
resolve([true, data]);
}
});
});
}
module.exports = exec;
index.js文件内容
// 对mysql库的增删改查等操作进行封装
const e = require('express');
let mysqlExec = require('./mysql.js');
async function mysqlReq(sql, sqlParams) {
let [err, list] = await mysqlExec(sql, sqlParams);
return list
}
// 处理查询条件
function searchCondition(info){
let whereInfo = ''
info.forEach((e,index)=>{
if(index == 0){
whereInfo += e
}else{
whereInfo = whereInfo + ' and ' + e
}
})
return whereInfo
}
module.exports = {
/**
* 查找
* @param {String} databaseName 数据表名
* @param {Array} whereArr 查询条件(字符串必须加"")
* @param {Array} showArr 查询内容
* @param {Number} numb 查询个数
* @returns 返回查询到的数据
*/
async find(databaseName,whereArr,showArr,numb){
let searchOrder = '';
let whereInfo = ''
if(whereArr){
whereInfo = searchCondition(whereArr)
}
!showArr ? searchOrder = `select * from ${databaseName}` : searchOrder = `select ${showArr.toString()} from ${databaseName}`
!whereArr ? searchOrder = searchOrder : searchOrder = searchOrder + ` where ${whereInfo}`
!numb ? searchOrder = searchOrder : searchOrder = searchOrder + ` limit ${numb}`
// 发送请求
let info = await mysqlReq(searchOrder)
return info
},
/**
* 插入
* @param {String} databaseName 数据表名
* @param {Object} insertObj 插入数据
*/
async insert(databaseName,insertObj){
let whereInfo = []
let insertInfo = []
for(let e in insertObj){
// 不是数字和NOW()/now()就加上双引号
if(typeof insertObj[e] != 'number' && insertObj[e]!='NOW()' && insertObj[e]!='now()') insertObj[e] = `"${insertObj[e]}"`
whereInfo.push(e)
insertInfo.push(insertObj[e])
}
let insertOrder = `INSERT INTO ${databaseName} ( ${whereInfo} ) VALUES ( ${insertInfo} )`
// 发送请求
let info = await mysqlReq(insertOrder)
return info
},
/**
* 更新
* @param {String} databaseName 数据表名
* @param {Array} setArr 更新的数据
* @param {Array} whereArr 查询条件
* @returns
*/
async update(databaseName,setArr,whereArr){
let updateOrder = '';
let whereInfo = searchCondition(whereArr)
updateOrder = `UPDATE ${databaseName} SET ${setArr} WHERE ${whereInfo}`
// 发送请求
let info = await mysqlReq(updateOrder)
return info
},
/**
* 删除
* @param {String} databaseName 数据表名
* @param {Array} whereArr 查询条件
* @returns
*/
async delete(databaseName,whereArr){
let deleteOrder = ''
let whereInfo = ''
if(whereArr){
whereInfo = searchCondition(whereArr)
console.log(deleteOrder);
deleteOrder = `DELETE FROM ${databaseName} where ${whereInfo}`
}else{
deleteOrder = `DELETE FROM ${databaseName}`
}
// 发送请求
let info = await mysqlReq(deleteOrder)
return info
}
}
引用方式
// 在需要使用sql操作的文件中先引入
let sql = require('./mysql/index.js')
// 插入示例
// sql.insert('数据库名',插入对象)
// 插入对象可以是NOW()、now()
var insertObj = {change_img:change_title,change_date:'NOW()'}
sql.insert('tbl',insertObj)
// 查询示例
// sql.find('数据库名',查询条件,查询内容,查询个数) 必填
// 查询条件 Array 举例:[`a="1"`,`b=1`] 加引号为字符,不加为数字 非必填
// 查询内容 Array 举例:['a','b'] 只查看列名为a和b的列 非必填
// 查询个数 number 非必填
// 如果要没有查询条件但有查询内容 需要 sql.find('tbl',[],['a','b'])
sql.find('tbl',[`pay_master="${info.account}"`,`pay_state="${info.type}"`])
// 更新示例
// sql.update('数据表名',更新的数据,查询条件)
// 更新的数据 Array 举例:[`a="1"`,`b=1`]
// 查询条件 Array 举例:[`pay_id='${orderInfo.pay_id}'`]
sql.update('tbl',[`pay_state="订单完成"`],[`pay_id='${orderInfo.pay_id}'`])