node中mysql连接封装

本文介绍了一种使用Node.js封装MySQL连接池的方法,通过创建连接池提高数据库操作效率,并展示了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封装

const mysql=require('mysql');

// 创建连接池,效率更高,不需要每次操作数据库都创建连接
var pool  = mysql.createPool({
    connectionLimit : 10,
    host            : 'localhost',
    user            : 'root',
    password        : 'root',
    database        : 'cms'
  });

// 查询返回的是数组
// 增删改返回的是对象
exports.query=(sqlStr)=>{
    return new Promise((resolve,reject)=>{
        // 从连接池里面拿一个连接
        pool.getConnection(function(err, connection) {
            if(err){
                return reject(err)
            }
            connection.query(sqlStr, (error, ...args) => {
                // 操作结束尽早释放连接
                connection.release();
                if (error) {
                    return reject(error)
                };
                resolve(...args)
              });
        });
    })
}


### Node.js 中 MySQL 操作的封装 对于希望简化并优化在 Node.js 应用程序中与 MySQL 数据库交互过程的开发者来说,创建一个良好的数据库操作层至关重要。这不仅有助于提高代码可读性和维护性,还能增强安全性以及性能表现。 #### 使用 `mysql` 或者更现代的 `mysql2` 模块作为基础 考虑到社区支持和技术演进情况,推荐选用 `mysql2` 替代原始版本较低效能特性的 `mysql` 来建立连接[^1]。安装命令如下: ```bash npm install mysql2 ``` #### 构建基本的数据库连接池类 为了提升效率减少每次请求都重新建立新链接带来的开销,采用连接池机制是一个不错的选择。下面展示了一个简单而实用的例子来说明这一点: ```javascript const mysql = require('mysql2/promise'); class Database { constructor(config) { this.pool = mysql.createPool({ host: config.host, user: config.user, password: config.password, database: config.database, waitForConnections: true, connectionLimit: 10, queueLimit: 0 }); } async executeQuery(sql, params=[]) { try { const [rows] = await this.pool.execute(sql, params); return rows; } catch (error) { throw error; } } close() { this.pool.end(); } } ``` 此段代码定义了一个名为 `Database` 的类,它接受配置对象初始化,并提供了一种安全的方式去执行 SQL 命令。值得注意的是,在这里使用了 `async/await` 结构配合 promise-based API 实现更加直观易懂的操作流程[^3]。 #### 扩展 CRUD 方法 进一步扩展上述例子以包含常见的增删改查(CRUD) 功能是非常有帮助的。以下是几个可能的方法实现: ```javascript // 插入记录 async insert(table, data) { let columns = Object.keys(data).join(", "); let placeholders = Object.values(data).map(() => "?").join(", "); let sql = `INSERT INTO ${table} (${columns}) VALUES (${placeholders})`; return await this.executeQuery(sql, Object.values(data)); } // 更新特定条件下的多条记录 async update(table, updates, whereClause="") { let setPart = Object.entries(updates).map(([key,value])=>`${key}= ?`).join(', '); let conditions = whereClause ? " WHERE "+whereClause : ""; let sql = `UPDATE ${table} SET ${setPart}${conditions}`; return await this.executeQuery(sql, [...Object.values(updates)]); } // 删除符合条件的一或多条记录 async deleteFromTable(table, whereClause="") { let condition = whereClause ? "WHERE " + whereClause : ''; let sql = `DELETE FROM ${table} ${condition}`; return await this.executeQuery(sql); } // 获取表内所有数据或按指定条件筛选后的结果集 async selectAllOrByCondition(table, fields='*', whereClause='') { let fieldList = Array.isArray(fields)?fields.join(','):`${fields}`; let condition = whereClause ? 'WHERE '+whereClause:''; let sql = `SELECT ${fieldList} FROM ${table} ${condition}`; return await this.executeQuery(sql); } ``` 以上方法允许应用程序轻松地对关联表格实施标准的数据操纵动作,同时也保持了灵活性以便应对复杂查询需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值