您的位置:首页 > Web前端 > Node.js

node基于async/await对mysql进行封装

2019-06-20 10:09 2783 查看

前言

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

[i]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  node async await mysql 封装