fork me on github

node封装mysql操作

前言  

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

原理

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

代码

  1 'use strict';
  2 const mysql  = require( 'mysql' );
  3 
  4 var pool  = mysql.createPool( {
  5     connectionLimit : 50,
  6     host            : '',
  7     user            : '',
  8     password    : '',
  9     database     : '',
 10     multipleStatements : true  //是否允许执行多条sql语句
 11 } );
 12 //将结果已对象数组返回
 13 var row=( sql , ...params )=>{
 14     return new Promise(function(resolve,reject){
 15         pool.getConnection(function(err,connection){
 16             if(err){
 17                 reject(err);
 18                 return; 
 19             }
 20             connection.query( sql , params , function(error,res){
 21                 connection.release();
 22                 if(error){
 23                     reject(error);
 24                     return;
 25                 }
 26                 resolve(res);
 27             });
 28         });
 29     });
 30 };
 31 //返回一个对象
 32 var first=( sql , ...params )=>{
 33     return new Promise(function(resolve,reject){
 34         pool.getConnection(function(err,connection){
 35             if(err){
 36                 reject(err);
 37                 return; 
 38             }
 39             connection.query( sql , params , function(error,res){
 40                 connection.release();
 41                 if(error){
 42                     reject(error);
 43                     return;
 44                 }
 45                 resolve( res[0] || null );
 46             });
 47         });
 48     });
 49 };
 50 //返回单个查询结果
 51 var single=(sql , ...params )=>{
 52     return new Promise(function(resolve,reject){
 53         pool.getConnection(function(err,connection){
 54             if(err){
 55                 reject(err);
 56                 return; 
 57             }
 58             connection.query( sql , params , function(error,res){
 59                 connection.release();
 60                 if(error){
 61                     reject( error );
 62                     return;
 63                 }
 64                 for( let i in res[0] )
 65                 {
 66                     resolve( res[0][i] || null );
 67                     return;
 68                 }
 69                 resolve(null);
 70             });
 71         });
 72     });
 73 }
 74 //执行代码,返回执行结果
 75 var execute=(sql , ...params )=>{
 76     return new Promise(function(resolve,reject){
 77         pool.getConnection(function(err,connection){
 78             if(err){
 79                 reject(err);
 80                 return; 
 81             }
 82             connection.query( sql , params , function(error,res){
 83                 connection.release();
 84                 if(error){
 85                     reject(error);
 86                     return;
 87                 }
 88                 resolve( res );
 89             });
 90         });
 91     });
 92 }
 93 
 94 //模块导出
 95 module.exports = {
 96     ROW     : row ,
 97     FIRST   : first ,
 98     SINGLE  : single ,
 99     EXECUTE : execute 
100 }
101  

使用示例。

const mysql = require('./mysql.js');

(async ()=>{
    let s = await mysql.row(sql,params);
    console.log(s);
})();

 

posted @ 2017-09-05 15:31  烦嚣的人  阅读(6516)  评论(0编辑  收藏  举报