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); })();