node封装mysql模块

Posted cosyer的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
}

 

以上是关于node封装mysql模块的主要内容,如果未能解决你的问题,请参考以下文章

Node.js模块封装及使用

Node.js学习笔记六搜索和安装Node封装模块

Node.js学习笔记三什么是Node封装模块?(Node Packaged Module.module)

node.js笔记——模块的开发

找不到模块“mysql”node.js

如何发布一个自定义Node.js模块到NPM(详细步骤)