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 相关文章推荐
Javascript生成json的函数代码(可以用php的json_decode解码)
Jun 11 Javascript
JavaScript之数组(Array)详解
Apr 01 Javascript
js实现向右横向滑出的二级菜单效果
Aug 27 Javascript
jquery ztree实现树的搜索功能
Feb 25 Javascript
JavaScript模拟鼠标右键菜单效果
Dec 08 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
Apr 11 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
Aug 20 Javascript
AngularJS学习第二篇 AngularJS依赖注入
Feb 13 Javascript
jquery编写日期选择器
Mar 16 Javascript
JavaScript基础之this详解
Jun 04 Javascript
在Create React App中使用CSS Modules的方法示例
Jan 15 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
php生成HTML文件的类方法
2019/10/11 PHP
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
毕业实习个人鉴定范文
2013/12/10 职场文书
结婚邀请函范文
2014/01/14 职场文书
公司员工活动策划方案
2014/08/20 职场文书
银行业务授权委托书
2014/10/10 职场文书
安阳殷墟导游词
2015/02/10 职场文书
邹越演讲观后感
2015/06/15 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
2015选调生工作总结
2015/07/24 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python