前言
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 pool = mysql.createPool( { connectionLimit : 50, host : '', user : '', password : '', database : '', 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 }
使用示例
const mysql = require('./mysql.js');(async ()=>{let s = await mysql.row(sql,params);console.log(s);})();
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答