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();
    }
  • 相关阅读:
    (转)运维角度浅谈MySQL数据库优化
    关于MySQL的null值
    MySQL优化——or条件优化
    MySQL优化原理
    Xcode Archive打包失败问题
    ionic3 对android包进行签名
    ios 审核未通过 相机相册权限问题
    js计算两个日期相差天数
    截取URL链接中字段的方法
    ionic3 自定义组件 滑动选择器 ion-multi-picker
  • 原文地址:https://www.cnblogs.com/cosyer/p/7763602.html
Copyright © 2011-2022 走看看