node基于async/await對mysql進行封裝
前言
node是基于異步的,因此在進行數(shù)據(jù)庫查詢操作的通常是通過回調(diào)來操作查詢結(jié)果。但是在有了es7的async/await,基本不再需要回調(diào)了,所以本篇是基于async/await對mysql進行一次操作封裝,讓查詢更加方便。(node版本需>=7.0)。
原理
簡單來說,async/await的實現(xiàn)原理是基于promise,根據(jù)promise的狀態(tài)來判斷是否真正返回,因此我們可以在mysql真正查詢到結(jié)果后將promise狀態(tài)切換為resolve,返回結(jié)果。如出現(xiàn)錯誤通過reject返回錯誤信息,reject需要用try/catch進行捕獲。
代碼
'use strict';
const mysql = require( 'mysql' );
var pool = mysql.createPool( {
connectionLimit : 50,
host : '',
user : '',
password : '',
database : '',
multipleStatements : true //是否允許執(zhí)行多條sql語句
} );
//將結(jié)果已對象數(shù)組返回
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 );
});
});
});
};
//返回單個查詢結(jié)果
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);
});
});
});
}
//執(zhí)行代碼,返回執(zhí)行結(jié)果
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);
})();
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Node.js 中exports 和 module.exports 的區(qū)別
這篇文章主要介紹了Node.js 中exports 和 module.exports 的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-03-03
詳解如何在Node.js中實現(xiàn)HTTP/2推送信息
HTTP/2 是一種現(xiàn)代化的網(wǎng)絡協(xié)議,它引入了多路復用、頭部壓縮和服務器推送等特性,其中,服務器推送允許服務器在客戶端請求資源時,主動推送額外的資源,提升頁面加載速度,下面將介紹如何在 Node.js 中實現(xiàn) HTTP/2 推送信息,需要的朋友可以參考下2024-12-12

