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

前言

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

})();

以上是 node基于async/await对mysql进行封装 的全部内容, 来源链接: utcz.com/z/361241.html

回到顶部