node封裝mysql操做

前言  

        node是基於異步的,所以在進行數據庫查詢操做的一般是經過回調來操做查詢結果。可是在有了es7的async/await,基本再也不須要回調了,因此本篇是基於async/await對mysql進行一次操做封裝,讓查詢更加方便。(node版本需>=7.0)。 node

原理

        簡單來講,async/await的實現原理是基於promise,根據promise的狀態來判斷是否真正返回,所以咱們能夠在mysql真正查詢到結果後將promise狀態切換爲resolve,返回結果。如出現錯誤經過reject返回錯誤信息,reject須要用try/catch進行捕獲。mysql

代碼

  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  

使用示例。sql

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

(async ()=>{
    let s = await mysql.row(sql,params);
    console.log(s);
})();
相關文章
相關標籤/搜索