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


Posted in Javascript onJune 20, 2019

前言

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

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

Javascript 相关文章推荐
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
JavaScript 数组运用实现代码
Apr 13 Javascript
js监听键盘事件示例代码
Jul 26 Javascript
浅析Javascript中bind()方法的使用与实现
Apr 29 Javascript
jQuery获取同级元素的简单代码
Jul 09 Javascript
AngularJS中比较两个数组是否相同
Aug 24 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
Mar 30 Javascript
详解webpack打包vue时提取css
May 26 Javascript
JavaScript简介_动力节点Java学院整理
Jun 26 Javascript
Vue的土著指令和自定义指令实例详解
Feb 04 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
Sep 28 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 Javascript
JavaScrip数组去重操作实例小结
Jun 20 #Javascript
Vue 动态添加路由及生成菜单的方法示例
Jun 20 #Javascript
JavaScript命名空间模式实例详解
Jun 20 #Javascript
npm的lock机制解析
Jun 20 #Javascript
express如何解决ajax跨域访问session失效问题详解
Jun 20 #Javascript
JS去除字符串最后的逗号实例分析【四种方法】
Jun 20 #Javascript
如何在微信小程序中实现Mixins方案
Jun 20 #Javascript
You might like
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
PHP编程与应用
2006/10/09 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
python处理PHP数组文本文件实例
2014/09/18 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
学生会主席演讲稿
2014/04/25 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
超市开店计划书
2014/09/15 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
电工实训报告总结
2014/11/05 职场文书
Apache POI的基本使用详解
2021/11/07 Servers
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js