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进行捕获。
代码
'usestrict'; constmysql=require('mysql'); varpool=mysql.createPool({ connectionLimit:50, host:'', user:'', password:'', database:'', multipleStatements:true//是否允许执行多条sql语句 }); //将结果已对象数组返回 varrow=(sql,...params)=>{ returnnewPromise(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); }); }); }); }; //返回一个对象 varfirst=(sql,...params)=>{ returnnewPromise(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); }); }); }); }; //返回单个查询结果 varsingle=(sql,...params)=>{ returnnewPromise(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(letiinres[0]) { resolve(res[0][i]||null); return; } resolve(null); }); }); }); } //执行代码,返回执行结果 varexecute=(sql,...params)=>{ returnnewPromise(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 }
使用示例
constmysql=require('./mysql.js'); (async()=>{ lets=awaitmysql.row(sql,params); console.log(s); })();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。