node中mysql封装

第一次封装函数,难免有地方考虑不到,如果有发现错误或可以补充修改的地方,欢迎指正。

📌 创建 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}'`])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值