zoukankan      html  css  js  c++  java
  • node封装mysql模块

    node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果。但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一次操作封装,让查询更加方便。(node版本需>=7.0)。 

    简单来说,async/await的实现原理是基于promise,根据promise的状态来判断是否真正返回,因此我们可以在mysql真正查询到结果后将promise状态切换为resolve,返回结果。如出现错误通过reject返回错误信息,reject需要用try/catch进行捕获。

    'use strict';
    const mysql = require('mysql');
    var local = true
    var pool
    
    // 创建连接池
    if (local) {
        pool = mysql.createPool({
            connectionLimit: 50,
            host: 'localhost',
            user: 'root',
            password: 'root',
            database: 'crawl',
            multipleStatements: true  //是否允许执行多条sql语句
        });
    } 
    
    //将结果已对象数组返回
    var row = (sql, ...params) => {
        return new Promise(function (resolve, reject) {
            pool.getConnection(function (err, connection) {
                if (err) {
                    reject(err);
                    return;
                }
                connection.query(sql, params, function (error, res) {
                    connection.release();
                    if (error) {
                        reject(error);
                        return;
                    }
                    resolve(res);
                });
            });
        });
    };
    
    //返回一个对象
    var first = (sql, ...params) => {
        return new Promise(function (resolve, reject) {
            pool.getConnection(function (err, connection) {
                if (err) {
                    reject(err);
                    return;
                }
                connection.query(sql, params, function (error, res) {
                    connection.release();
                    if (error) {
                        reject(error);
                        return;
                    }
                    resolve(res[0] || null);
                });
            });
        });
    };
    
    //返回单个查询结果
    var single = (sql, ...params) => {
        return new Promise(function (resolve, reject) {
            pool.getConnection(function (err, connection) {
                if (err) {
                    reject(err);
                    return;
                }
                connection.query(sql, params, function (error, res) {
                    connection.release();
                    if (error) {
                        reject(error);
                        return;
                    }
                    for (let i in res[0]) {
                        resolve(res[0][i] || null);
                        return;
                    }
                    resolve(null);
                });
            });
        });
    }
    
    //执行代码,返回执行结果
    var execute = (sql, ...params) => {
        return new Promise(function (resolve, reject) {
            // 获取连接
            pool.getConnection(function (err, connection) {
                if (err) {
                    reject(err);
                    return;
                }
                // 操作数据库
                connection.query(sql, params, function (error, res) {
                    // 释放
                    connection.release();
                    if (error) {
                        reject(error);
                        return;
                    }
                    resolve(res);
                });
            });
        });
    }
    
    //模块导出
    module.exports = {
        ROW: row,
        FIRST: first,
        SINGLE: single,
        EXECUTE: execute
    }
    
    /*连接mysql*/
    function connectToMysql() {
        var connection = mysql.createConnection({
            host: '',
            user: '',
            password: '',
            database: ''
        });
        connection.connect();
        //查询
        connection.query('SELECT * FROM user;', function (err, rows, fields) {
            if (err) throw err;
            console.log('The solution is: ', rows[0]);
        });
        //关闭连接
        connection.end();
    }
  • 相关阅读:
    02.创建型————工厂方法模式
    01.创建型————简单工厂模式
    HBase JavaAPI操作示例
    MongoDB
    大数据第三天
    Zookeeper操作
    MR操作
    HDFS操作
    【GISER&&Painter】svg的那些事
    读法克鸡丝博文《技术,产品,团队》有感
  • 原文地址:https://www.cnblogs.com/cosyer/p/7763602.html
Copyright © 2011-2022 走看看